Перевод статьи 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.