我可以编写包含临时文件的 .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)