Вырезать и вставить в zip-файл - PullRequest
0 голосов
/ 07 августа 2020

Я хотел бы вырезать и вставить файл в 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 Ответ

1 голос
/ 07 августа 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...