Работа с архивами: zipfile, tarfile, gzip

📦 Зачем нужны архивы в Python?

Архивы — это как волшебные чемоданы для данных: они сжимают файлы, экономят место и упрощают передачу информации. В Python есть три мощных модуля для работы с архивами:

  1. zipfile — для ZIP-архивов (самый популярный формат)
  2. tarfile — для TAR/GZ/BZ2 (часто используется в Linux)
  3. 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 + пароль

💡 Фишка от Данилы Бежина

Для работы с архивами в продакшн-среде посмотрите продвинутый гайд по обработке больших архивов потоковым методом — это спасёт при работе с гигабайтами данных!

Попробуйте прямо сейчас создать архив своего проекта — это отличный способ закрепить знания на практике. Ваш код станет ещё профессиональнее с этими инструментами! 🏆

Скрыть рекламу навсегда

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube