如何在压缩文件之前临时重命名文件或在 Python 中创建重命名的临时文件
How to temporarily re-name a file or Create a re-named temp-file in Python before zipping it
在下面的代码中,我试图压缩文件列表,我试图在压缩之前重命名文件。因此,文件名将采用更易于用户阅读的格式。
第一次成功了,但是当我再次这样做时失败,错误是文件名已经存在
通过 FileResponse 通过 Django Rest Framework 返回响应。
有没有更简单的方法来实现这个?
filenames_list=['10_TEST_Comments_12/03/2021','10_TEST_Posts_04/10/2020','10_TEST_Likes_04/09/2020']
with zipfile.ZipFile(fr"reports/downloads/reports.zip", 'w') as zipF:
for file in filenames_list:
friendly_name = get_friendly_name(file)
if friendly_name is not None:
os.rename(file,fr"/reports/downloads/{friendly_name}")
file = friendly_name
zipF.write(fr"reports/downloads/{file}", file, compress_type=zipfile.ZIP_DEFLATED)
zip_file = open(fr"reports/downloads/reports.zip", 'rb')
response = FileResponse(zip_file)
return response
ZipFile.write
有第二个参数,arcname
,它允许您重命名文件而无需任何复制。您不需要将 file
移动到单独的文件夹,或者实际重命名它。
from os.path import basename
for file in filenames_list:
if (name := get_friendly_name(file)) is None:
name = basename(file)
zipF.write(file, name, compress_type=zipfile.ZIP_DEFLATED)
通过剥离 basename
,您完全不需要移动到普通文件夹。
在下面的代码中,我试图压缩文件列表,我试图在压缩之前重命名文件。因此,文件名将采用更易于用户阅读的格式。
第一次成功了,但是当我再次这样做时失败,错误是文件名已经存在
通过 FileResponse 通过 Django Rest Framework 返回响应。 有没有更简单的方法来实现这个?
filenames_list=['10_TEST_Comments_12/03/2021','10_TEST_Posts_04/10/2020','10_TEST_Likes_04/09/2020']
with zipfile.ZipFile(fr"reports/downloads/reports.zip", 'w') as zipF:
for file in filenames_list:
friendly_name = get_friendly_name(file)
if friendly_name is not None:
os.rename(file,fr"/reports/downloads/{friendly_name}")
file = friendly_name
zipF.write(fr"reports/downloads/{file}", file, compress_type=zipfile.ZIP_DEFLATED)
zip_file = open(fr"reports/downloads/reports.zip", 'rb')
response = FileResponse(zip_file)
return response
ZipFile.write
有第二个参数,arcname
,它允许您重命名文件而无需任何复制。您不需要将 file
移动到单独的文件夹,或者实际重命名它。
from os.path import basename
for file in filenames_list:
if (name := get_friendly_name(file)) is None:
name = basename(file)
zipF.write(file, name, compress_type=zipfile.ZIP_DEFLATED)
通过剥离 basename
,您完全不需要移动到普通文件夹。