Вы хотите выполнить эту операцию atomi c: Либо все успешно, либо все терпит неудачу.
Я думаю, что самый простой способ выполнить sh это сначала удалить файл:
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
, так что он также работает в файловых системах.