Разархивировать zipx, управляя winzip с помощью python
Мне нужно разархивировать множество файлов zipx в каталог при проверке на ходу, если распакованные файлы соответствуют условию. Условие "если есть файл с таким же именем поверх него, только если разархивированный файл больше".
Я хотел управлять winzip с помощью win32com, но не смог найти Object.Name с помощью COM-браузера (win32com\client\combrowse.py). Также было бы неплохо найти методы, которые я мог бы использовать с этим объектом winzip.
Может ли кто-нибудь помочь с тем, как я выберу, или посоветовать более простой вариант решения описанной проблемы. Thansk.
1 ответ
Забудь про win32com. Вместо,
- создать папку назначения
- перевернуть zipx архивы; для каждого:
- создать временную папку с помощью модуля временных файлов Python
- используйте модуль подпроцесса для запуска вашей утилиты unzip (которая обрабатывает формат zipx) в архиве zipx с опцией командной строки для извлечения в созданную временную папку
- используйте модуль shutil для копирования каждого разархивированного файла в этой папке в общую папку назначения, созданную на первом шаге, если файл соответствует условию. Для размера файла используйте Path.stat(). St_size или os.path.get_size().
- стереть временную папку
Таким образом, каждый архив распаковывается в отдельную временную папку, но все извлеченные файлы перемещаются в одну общую папку. Кроме того, вы можете использовать одну и ту же временную папку для всех архивов, но очищать папку в конце каждой итерации и удалять временную папку в конце сценария.
- создать папку назначения
- создайте папку для извлечения временного архива с помощью модуля tempfile в Python
- перевернуть zipx архивы; для каждого:
- используйте модуль подпроцесса для запуска вашей утилиты unzip (которая обрабатывает формат zipx) в архиве zipx с опцией командной строки для извлечения в созданную временную папку
- используйте модуль shutil для копирования каждого разархивированного файла в этой папке в общую папку назначения, созданную на первом шаге, если файл соответствует условию. Для размера файла используйте Path.stat(). St_size или os.path.get_size().
- стереть содержимое временной папки
- стереть временную папку