Разархивировать zipx, управляя winzip с помощью python

Мне нужно разархивировать множество файлов zipx в каталог при проверке на ходу, если распакованные файлы соответствуют условию. Условие "если есть файл с таким же именем поверх него, только если разархивированный файл больше".

Я хотел управлять winzip с помощью win32com, но не смог найти Object.Name с помощью COM-браузера (win32com\client\combrowse.py). Также было бы неплохо найти методы, которые я мог бы использовать с этим объектом winzip.

Может ли кто-нибудь помочь с тем, как я выберу, или посоветовать более простой вариант решения описанной проблемы. Thansk.

1 ответ

Забудь про win32com. Вместо,

  1. создать папку назначения
  2. перевернуть zipx архивы; для каждого:
    1. создать временную папку с помощью модуля временных файлов Python
    2. используйте модуль подпроцесса для запуска вашей утилиты unzip (которая обрабатывает формат zipx) в архиве zipx с опцией командной строки для извлечения в созданную временную папку
    3. используйте модуль shutil для копирования каждого разархивированного файла в этой папке в общую папку назначения, созданную на первом шаге, если файл соответствует условию. Для размера файла используйте Path.stat(). St_size или os.path.get_size().
    4. стереть временную папку

Таким образом, каждый архив распаковывается в отдельную временную папку, но все извлеченные файлы перемещаются в одну общую папку. Кроме того, вы можете использовать одну и ту же временную папку для всех архивов, но очищать папку в конце каждой итерации и удалять временную папку в конце сценария.

  1. создать папку назначения
  2. создайте папку для извлечения временного архива с помощью модуля tempfile в Python
  3. перевернуть zipx архивы; для каждого:
    1. используйте модуль подпроцесса для запуска вашей утилиты unzip (которая обрабатывает формат zipx) в архиве zipx с опцией командной строки для извлечения в созданную временную папку
    2. используйте модуль shutil для копирования каждого разархивированного файла в этой папке в общую папку назначения, созданную на первом шаге, если файл соответствует условию. Для размера файла используйте Path.stat(). St_size или os.path.get_size().
    3. стереть содержимое временной папки
  4. стереть временную папку
Другие вопросы по тегам