我有一个程序会输出一个包含许多.html文件的.zip文件给用户。我不需要.html文件存在于.zip之外的任何地方,所以我的想法是使用tempfile模块使它们成为TemporaryFiles。如何编写.zip的TempFile(假设可能)?
如果可以的话,我是否也可以指定TemporaryFiles的名称,这样当用户解压缩.zip时,文件将具有可读的名称?
答案 0 :(得分:1)
创建zip文件的最佳方法是将所有必需文件(HTML)文件存储在(临时)目录中。然后你可以压缩目录。
比如说,您将ZIP文件存储在work_dir
中,并且您有一个用于编写HTML文件的函数write_html
,您可以像这样压缩HTML文件:
import os
import shutil
import tempfile
import zipfile
work_dir = "..."
zip_path = os.path.join(work_dir, "delivery.zip")
zip_dir = tempfile.mkdtemp()
try:
with zipfile.zipfile(zip_path, "w", compression=zipfile.ZIP_DEFLATED) as zfd:
for html_name in html_names:
html_path = os.path.join(zip_dir, html_name)
write_html(html_path, html_name)
zfd.write(html_path, html_name)
finally:
shutil.rmtree(zip_dir)