我可以编写包含临时文件的 .zip 吗?
Can I write a .zip consisting of TemporaryFiles?
我有一个程序可以向用户输出一个由许多 .html 文件组成的 .zip 文件。我不需要 .html 文件存在于 .zip 之外的任何地方,所以我的想法是使用 tempfile 模块使它们成为 TemporaryFiles。如何编写 TempFile 的 .zip(假设这是可能的)?
如果可以,我是否也可以指定临时文件的名称,以便当用户解压缩 .zip 时,文件将具有可读的名称?
创建 zip 文件的最佳方法是将每个需要的文件(您的 HTML)文件存储在一个(临时)目录中。然后就可以压缩目录了。
比如说,您将 ZIP 文件存储在 work_dir
中,并且您有一个函数 write_html
用于编写 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)
我有一个程序可以向用户输出一个由许多 .html 文件组成的 .zip 文件。我不需要 .html 文件存在于 .zip 之外的任何地方,所以我的想法是使用 tempfile 模块使它们成为 TemporaryFiles。如何编写 TempFile 的 .zip(假设这是可能的)?
如果可以,我是否也可以指定临时文件的名称,以便当用户解压缩 .zip 时,文件将具有可读的名称?
创建 zip 文件的最佳方法是将每个需要的文件(您的 HTML)文件存储在一个(临时)目录中。然后就可以压缩目录了。
比如说,您将 ZIP 文件存储在 work_dir
中,并且您有一个函数 write_html
用于编写 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)