Работа с архивами: zipfile, tarfile, gzip
📦 Зачем нужны архивы в Python?
Архивы — это как волшебные чемоданы для данных: они сжимают файлы, экономят место и упрощают передачу информации. В Python есть три мощных модуля для работы с архивами:
zipfile— для ZIP-архивов (самый популярный формат)tarfile— для TAR/GZ/BZ2 (часто используется в Linux)gzip— для сжатия отдельных файлов
Пример из жизни: представь, что тебе нужно отправить 100 фотографий клиенту. Вместо 100 отдельных файлов ты упаковываешь их в один ZIP — удобно и профессионально!
🔐 Работаем с ZIP: создаём и читаем архивы
Создание ZIP-архива
import zipfile
# Создаём новый архив в режиме записи ('w')
with zipfile.ZipFile('archive.zip', 'w') as zipf:
# Добавляем файлы в архив
zipf.write('document.txt') # файл в текущей директории
zipf.write('/images/photo.jpg', 'photo.jpg') # с переименованием
🔹 Важно: режим 'w' перезапишет существующий архив! Для добавления файлов используй 'a'.
Чтение ZIP-архива
with zipfile.ZipFile('archive.zip', 'r') as zipf:
# Просмотр содержимого
print(zipf.namelist()) # ['document.txt', 'photo.jpg']
# Извлечение всех файлов
zipf.extractall('extracted_files')
# Извлечение одного файла
zipf.extract('document.txt', 'specific_folder')
💡 Профессиональный совет: всегда используй контекстный менеджер (with), чтобы архив корректно закрывался.
🎩 TAR + GZIP: профессиональное сочетание
TAR (Tape Archive) часто используется вместе с GZIP для максимального сжатия. Разберём на примере:
Создание TAR.GZ архива
import tarfile
# Создаём сжатый tar-архив (режим 'w:gz')
with tarfile.open('archive.tar.gz', 'w:gz') as tar:
tar.add('project_folder') # упаковываем всю папку
Распаковка TAR.GZ
with tarfile.open('archive.tar.gz', 'r:gz') as tar:
tar.extractall() # распаковываем в текущую директорию
# Или выборочно:
# tar.extract('project_folder/config.ini')
📌 Варианты режимов:
- 'w:' — несжатый TAR
- 'w:gz' — GZIP сжатие
- 'w:bz2' — BZIP2 сжатие (сильнее, но медленнее)
🚀 GZIP: сжатие одиночных файлов
Когда нужно сжать один файл (например, логи сервера), GZIP — идеальный выбор:
import gzip
import shutil
# Сжатие файла
with open('large_log.log', 'rb') as f_in:
with gzip.open('large_log.log.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
# Чтение сжатого файла
with gzip.open('large_log.log.gz', 'rb') as f:
content = f.read().decode('utf-8')
print(content[:100]) # первые 100 символов
🔍 Продвинутые техники работы с архивами
Добавление файлов с фильтрацией
with zipfile.ZipFile('project.zip', 'w') as zipf:
for file in os.listdir('.'):
if file.endswith('.py'): # только Python-файлы
zipf.write(file)
Проверка целостности ZIP-архива
with zipfile.ZipFile('archive.zip') as zipf:
if zipf.testzip() is None:
print("Архив не повреждён!")
else:
print("Обнаружены битые файлы!")
Парольная защита ZIP (Python 3.6+)
with zipfile.ZipFile('secret.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
zipf.setpassword(b'my_password')
zipf.write('top_secret.txt')
🛠 Когда что использовать? Быстрое руководство
| Задача | Лучший инструмент |
|---|---|
| Архивирование на Windows | zipfile |
| Архивирование на Linux | tarfile + 'w:gz' |
| Сжатие логов | gzip |
| Шифрование данных | zipfile + пароль |
💡 Фишка от Данилы Бежина
Для работы с архивами в продакшн-среде посмотрите продвинутый гайд по обработке больших архивов потоковым методом — это спасёт при работе с гигабайтами данных!
Попробуйте прямо сейчас создать архив своего проекта — это отличный способ закрепить знания на практике. Ваш код станет ещё профессиональнее с этими инструментами! 🏆