Существует несколько библиотек, используемых для извлечения архивных файлов через Python, таких как gzip, zipfile library, rarfile, tarfile, patool и т.д. Я нашел, что одна из библиотек (patool) особенно полезна из-за ее кросс-форматирования в том смысле, что он может извлекать практически любой архив, включая самые популярные, такие как ZIP, GZIP, TAR и RAR.
Чтобы извлечь файл архива с помощью patool, это легко:
patoolib.extract_archive( "Archive.zip",outdir="Folder1")
Где "Archive.zip"
- это путь к файлу архива, а "Folder1"
- путь к каталогу, в котором будет сохранен извлеченный файл.
Добыча отлично работает. Проблема в том, что если я снова запустил один и тот же код для одного и того же архивного файла, идентичный извлеченный файл будет сохранен в той же папке, но с немного другим именем (имя файла при первом запуске, имя_файла1 на втором, filename11 на третий и т.д.
Вместо этого мне нужен код для перезаписи извлеченного файла, если файл с тем же именем уже существует в каталоге.
Эта функция extract_archive
выглядит настолько минимальной - она содержит только эти два параметра, параметр verbosity
и параметр program
, который указывает программу, с которой вы хотите извлечь архивы.
редактирует:
Ответ Низама Мохамеда подтвердил, что функция extract_archive
фактически переписывает вывод. Я выяснил, что это было частично верно - функция перезаписывает ZIP файлы, но не файлы GZ, за которыми я и работаю. Для файлов GZ функция все еще генерирует новые файлы.
редактирует Ответ Padraic Cunningham предложен с использованием основного источника. Итак, я загрузил этот код и заменил свои старые скрипты библиотеки patool скриптами в ссылке. Вот результат:
os.listdir()
Out[11]: ['a.gz']
patoolib.extract_archive("a.gz",verbosity=1,outdir=".")
patool: Extracting a.gz ...
patool: ... a.gz extracted to `.'.
Out[12]: '.'
patoolib.extract_archive("a.gz",verbosity=1,outdir=".")
patool: Extracting a.gz ...
patool: ... a.gz extracted to `.'.
Out[13]: '.'
patoolib.extract_archive("a.gz",verbosity=1,outdir=".")
patool: Extracting a.gz ...
patool: ... a.gz extracted to `.'.
Out[14]: '.'
os.listdir()
Out[15]: ['a', 'a.gz', 'a1', 'a2']
Итак, функция extract_archive
создает новые файлы каждый раз, когда она выполняется. Файл, заархивированный под a.gz
, имеет другое имя от a
.