Как использовать подпроцесс для удаления файла в zip-папке с помощью Python

[Python 2.6.5] Простой вопрос, но я не могу найти документацию или предыдущие вопросы, отвечающие на мою проблему. Я пытаюсь удалить 2 файла в ZIP-папке (это 2 папки глубоко в ZIP-папке, если это имеет значение). Я хочу использовать подпроцесс для вызова 7Zip для удаления файлов, но понятия не имею, как даже запустить этот процесс. На данный момент я могу только открыть приложение. В идеале я хотел бы запустить скрипт Python, чтобы имена файлов были жестко закодированы в скрипте, и чтобы 7zip просто автоматически удалял эти файлы без открытия приложения, если это возможно.

Что у меня есть до сих пор:

import subprocess, os


rawLocation = 'SomeLocation\7-ZipPortable.exe'
subprocess.Popen([rawLocation])

Это успешно открывает приложение, но я бы хотел, чтобы оно автоматически удаляло файлы, даже не открывая их, если это возможно.

  • Примечание: Спасибо за помощь всем. В конечном итоге требования заказчика изменились, поэтому мне больше не нужно использовать эту логику.

person Furball177    schedule 24.01.2019    source источник
comment
Зачем использовать подпроцесс вместо модуля zipfile?   -  person Barmar    schedule 24.01.2019
comment
Модуль zipfile не поддерживает удаление файлов в папке zip из всего, что я исследовал.   -  person Furball177    schedule 24.01.2019


Ответы (2)


Вам необходимо использовать версию командной строки 7zip. И затем, согласно этой документации, вы сможете удалять файлы вот так.

7z d archive.zip deleteme.ext

Примечание: для тех, кто может подумать, что модуль Python zipfile будет хорошим решением. , просмотрел модуль, вроде не поддерживает удаление файлов из архива.

person wp-overwatch.com    schedule 24.01.2019
comment
Большое спасибо за комментарий, мистер Я, мне было интересно, можете ли вы показать, что я должен напечатать, чтобы это сработало. Я пытаюсь это сделать, но это явно неправильно. subprocess.run(" 7z d bin3.zip product.json") Я новичок в этих модулях/кодировании в целом. - person Furball177; 24.01.2019
comment
Что произойдет, если вы запустите 7z d bin3.zip product.json в командной строке? - person wp-overwatch.com; 26.01.2019

что-то вроде этого :

from subprocess import call

delete_me = "note.txt"
zip_file = "archive.zip"
try:
    call(['7z d', zip_file, delete_me])
except OSError:
    # handle errors here
    pass
person Fardin Allahverdi    schedule 26.01.2019