我可以写一个由TemporaryFiles组成的.zip吗?

时间:2016-07-13 21:16:43

标签: python zip temporary-files

我有一个程序会输出一个包含许多.html文件的.zip文件给用户。我不需要.html文件存在于.zip之外的任何地方,所以我的想法是使用tempfile模块使它们成为TemporaryFiles。如何编写.zip的TempFile(假设可能)?

如果可以的话,我是否也可以指定TemporaryFiles的名称,这样当用户解压缩.zip时,文件将具有可读的名称?

1 个答案:

答案 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)