我想剪切文件并将其粘贴到zip存档中。 一种可能的解决方案是先将文件写入zip存档,然后将其删除。
import os
import zipfile
with zipfile.ZipFile('demo.zip', 'a') as myzip:
myzip.write('demofile.txt')
os.remove("demofile.txt")
但是,可能是其他用户或进程已打开该文件。仅当可以写入zip存档和删除文件时,才可以将文件移动到zip吗?喜欢剪切粘贴吗?
答案 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
,以便它也可以跨文件系统使用。