Перевод статьи Read/unzip File(s) from Zip Or Tar.gz With Python от John D K.

Из этой статьи вы узнаете, как распаковать один или несколько архивов zip и tar.gz и получить информацию о них средствами языка Python. Мы рассмотрим извлечение одного или нескольких файлов из архива.
Шаг 1: получить информацию из архива zip или tar.gz
Сперва мы просмотрим содержимое zip-файла с помощью этого фрагмента кода:
from zipfile import ZipFile zipfile = 'file.zip' z = ZipFile(zipfile) z.infolist()
Результат:
[<ZipInfo filename='file/pandas-dataframe-background-color-based-condition-value-python.png' compress_type=deflate external_attr=0x20 file_size=32152 compress_size=31441>, <ZipInfo filename='file/text1.txt.txt' external_attr=0x20 file_size=0>]
Таким образом мы сможем узнать размеры и имена двух файлов:
- pandas-dataframe-background-color-based-condition-value-python.png
- text1.txt
Шаг 2: перечислить и прочитать все файлы из архива
Теперь мы можем получить список всех файлов в архиве:
from zipfile import ZipFile archive = 'file.zip' zip_file = ZipFile(archive) [text_file.filename for text_file in zip_file.infolist() ]
Результат:
['pandas-dataframe-background-color-based-condition-value-python.png', 'text1.txt']
Если вам нужно отсортировать файлы – например, получить только json – или прочитать их в формате датафреймов Pandas, можно сделать это следующим образом:
from zipfile import ZipFile
archive = 'file.zip'
zip_file = ZipFile(archive)
dfs = {text_file.filename: pd.read_csv(zip_file.open(text_file.filename))
for text_file in zip_file.infolist()
if text_file.filename.endswith('.json')}
dfs
Шаг 3: извлечь файлы из zip-архива
Пакет zipfile можно использовать для извлечения файлов из zip-архивов. Базовый пример:
import zipfile
archive = 'file.zip'
with zipfile.ZipFile(archive, 'r') as zip_file:
zip_file.extractall(directory_to_extract_to)
Шаг 4: извлечь файлы из tar/tar.gz
Чтобы извлечь файлы из архивов tar/tar.gz, можно воспользоваться кодом, приведенным ниже. Он использует модуль tarfileи разделяет эти два типа, чтобы применить подходящий режим распаковки:
import tarfile
zipfile = 'file.zip'
if zipfile.endswith("tar.gz"):
tar = tarfile.open(zipfile, "r:gz")
elif zipfile.endswith("tar"):
tar = tarfile.open(zipfile, "r:")
tar.extractall()
tar.close()
Примечание: все файлы из архива будут распакованы в текущей для данного скрипта рабочей директории.
Шаг 5: извлечь один файл из архива
Если вам нужно получить только один файл из архива, можно использовать методzipObject.extract(fileName, 'temp_py'). Простой пример:
import zipfile
archive = 'file.zip'
with zipfile.ZipFile(archive, 'r') as zip_file:
zip_file.extract('text1.txt', '.')
В этом примере мы извлечём файл 'text1.txt' в текущую рабочую директорию. Если вам нужно извлечь файл в другую директорию, можете изменить второй параметр — '.'
Заключение
В этом уроке мы выяснили, как с помощью Python извлечь один или несколько файлов из различных архивов, а также — как вывести список запакованных файлов и получить из них информацию. Мы затронули работу с двумя пакетами: zipfile и tarfile.

