python - ZipFile 不在存档文件内存储任何文本

标签 python python-zipfile

以下代码会导致 zip 中找到的文件为空,而不是其中包含一些文本:

def func(path):
    with tempfile.NamedTemporaryFile() as f:
        f.write('some text')
        with zipfile.ZipFile(path + '.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
            zf.write((f.name), path)

最佳答案

flush添加到文件对象:

def func(path):
    with tempfile.NamedTemporaryFile() as f:
        f.write('some text')
        f.flush()  # <-- lifesaver
        with zipfile.ZipFile(path + '.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
            zf.write((f.name), path)

此问题也会影响正常(非临时)文件,因此它们也需要 flush 处理:

def func(path):
    with open(path, 'w') as f:
        f.write('some text')
        f.flush()  # <-- lifesaver
        with zipfile.ZipFile(path + '.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
            zf.write(path)

或者,消除第二个 with block 的凹痕将避免使用 flush,因为当该 block 退出时文件会自动关闭,从而增加了它被刷新的机会:

def func(path):
    with open(path, 'w') as f:
        f.write('some text')
    with zipfile.ZipFile(path + '.zip', 'w', zipfile.ZIP_DEFLATED) as zf:
        zf.write(path)

请注意,这仅适用于第二个示例,不适用于第一个示例;请参阅tempfile docs究其原因。

关于python - ZipFile 不在存档文件内存储任何文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25467647/

相关文章:

python - 在 Python 中循环 zipfile 时,我怎么知道一个项目是一个目录?

Python zipfile 不释放 zip 文件

python - 将一个或多个吸引子添加到一组随机二维点

python - Python 中数字的处理

python - django manytomany - 从中​​获取值(value)

python - 如何使用 Python 的 zipfile 模块对 ZIP 文件中的文件设置权限(属性)?

python - 有没有一种方法可以监视导致 linux 中的 python 脚本程序关闭的原因?

python - 检查列表是否包含 4 个相同值的元素

python - 如何获取压缩文件夹内文件的元数据