剪切并粘贴到zip文件

时间:2020-08-07 12:23:24

标签: python python-3.x windows

我想剪切文件并将其粘贴到zip存档中。 一种可能的解决方案是先将文件写入zip存档,然后将其删除。

import os
import zipfile

with zipfile.ZipFile('demo.zip', 'a') as myzip:
    myzip.write('demofile.txt')
    os.remove("demofile.txt")

但是,可能是其他用户或进程已打开该文件。仅当可以写入zip存档和删除文件时,才可以将文件移动到zip吗?喜欢剪切粘贴吗?

1 个答案:

答案 0 :(得分:1)

您希望使此操作成为原子操作:要么一切成功,要么一切失败。

我认为最简单的方法是先将文件移走:

import tempfile
import shutil

with tempfile.TemporaryDirectory() as tmpdir:
    shutil.move("demofile.txt", tmpdir + "/demofile.txt")
    with zipfile.ZipFile("demo.zip", "a") as myzip:
        myzip.write(tmpdir + "/demofile.txt")

现在,当无法移动/删除文件时,它将在shutil.move行失败,并且zip文件尚未发生任何变化。如果文件 可以移动,则没有人打开它,并且删除(现在在离开tempfile.TemporaryDirectory上下文时自动发生)应该不会失败。

我使用的是shutil.move而不是os.rename,以便它也可以跨文件系统使用。