# `zipfile` — Work with ZIP archives

Source code: Lib/zipfile.py

Формат файлу ZIP є загальним стандартом архівування та стиснення. Цей модуль надає інструменти для створення, читання, запису, додавання та списку ZIP-файлів. Будь-яке розширене використання цього модуля вимагатиме розуміння формату, як визначено в Примітці до програми PKZIP.

Цей модуль наразі не обробляє багатодискові файли ZIP. Він може обробляти ZIP-файли, які використовують розширення ZIP64 (тобто ZIP-файли розміром понад 4 ГБ). Він підтримує розшифровку зашифрованих файлів у ZIP-архівах, але наразі не може створити зашифрований файл. Дешифрування надзвичайно повільне, оскільки воно реалізовано на рідному Python, а не на C.

Модуль визначає такі елементи:

exception `zipfile.``BadZipFile`

  Помилка виникає через погані файли ZIP.

  Нове в версії 3.2.

exception `zipfile.``BadZipfile`

  Псевдонім `BadZipFile` для сумісності зі старішими версіями Python.

  Застаріло починаючи з версії 3.2.

exception `zipfile.``LargeZipFile`

  Помилка виникає, коли ZIP-файл вимагає функції ZIP64, але її не ввімкнено.

class `zipfile.``ZipFile`

  Клас для читання та запису ZIP-файлів. Перегляньте розділ Об’єкти ZipFile для деталей конструктора.

class `zipfile.``Path`

  Class that implements a subset of the interface provided by `pathlib.Path`, including the full `importlib.resources.abc.Traversable` interface.

  Нове в версії 3.8.

class `zipfile.``PyZipFile`

  Клас для створення ZIP-архівів, що містять бібліотеки Python.

class `zipfile.``ZipInfo`(filename='NoName', date_time=(1980, 1, 1, 0, 0, 0))

  Клас, який використовується для представлення інформації про члена архіву. Екземпляри цього класу повертаються методами `getinfo()` і `infolist()` об’єктів `ZipFile`. Більшості користувачів модуля `zipfile` не потрібно їх створювати, а використовувати лише ті, що створені цим модулем. filename має бути повним ім’ям члена архіву, а date_time має бути кортежем, що містить шість полів, які описують час останньої зміни файлу; поля описані в розділі Об’єкти ZipInfo.

`zipfile.``is_zipfile`(filename)

  Повертає `True`, якщо filename є дійсним ZIP-файлом на основі його магічного числа, інакше повертає `False`. ім’я файлу також може бути файлом або файлоподібним об’єктом.

  Змінено в версії 3.1: Підтримка файлів і файлоподібних об’єктів.

`zipfile.``ZIP_STORED`

  Числова константа для нестисненого члена архіву.

`zipfile.``ZIP_DEFLATED`

  Числова константа для звичайного методу стиснення ZIP. Для цього потрібен модуль `zlib`.

`zipfile.``ZIP_BZIP2`

  Числова константа для методу стиснення BZIP2. Для цього потрібен модуль `bz2`.

  Нове в версії 3.3.

`zipfile.``ZIP_LZMA`

  Числова константа для методу стиснення LZMA. Для цього потрібен модуль `lzma`.

  Нове в версії 3.3.

  Примітка

  Специфікація формату файлу ZIP включає підтримку стиснення bzip2 з 2001 року та стиснення LZMA з 2006 року. Однак деякі інструменти (включаючи старіші випуски Python) не підтримують ці методи стиснення та можуть взагалі відмовитися обробляти файл ZIP або не вдається видобути окремі файли.

Дивись також

Примітка до програми PKZIP

  Документація щодо формату файлу ZIP від Філа Каца, творця формату та використаних алгоритмів.

Info-ZIP Home Page

  Інформація про програми ZIP-архівів та бібліотеки розробки проекту Info-ZIP.

## Об’єкти ZipFile

class `zipfile.``ZipFile`(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None, *, strict_timestamps=True)

  Відкрийте файл ZIP, де file може бути шляхом до файлу (рядком), файлоподібним об’єктом або path-like object.

  Параметр mode має бути `'r'` для читання існуючого файлу, `'w'` для скорочення та запису нового файлу, `'a'` для додавання до існуючого файлу або `'x''`, щоб створити та записати новий файл виключно. Якщо mode має значення `'x'` і file посилається на існуючий файл, буде викликано `FileExistsError`. Якщо mode має значення `'a'` і file посилається на існуючий ZIP-файл, то до нього додаються додаткові файли. Якщо файл не відноситься до файлу ZIP, тоді до файлу додається новий архів ZIP. Це призначено для додавання архіву ZIP до іншого файлу (наприклад, `python.exe`). Якщо mode має значення `'a'` і файл взагалі не існує, він буде створений. Якщо mode має значення `'r'` або `'a'`, файл має бути доступним для пошуку.

  стиснення — це метод стиснення ZIP, який використовується під час запису архіву, і має бути `ZIP_STORED`, `ZIP_DEFLATED`, `ZIP_BZIP2` або `ZIP_LZMA`; нерозпізнані значення призведуть до появи `NotImplementedError`. Якщо вказано `ZIP_DEFLATED`, `ZIP_BZIP2` або `ZIP_LZMA`, але відповідний модуль (`zlib`, `bz2` або `lzma`) недоступний, виникає `RuntimeError`. Типовим є `ZIP_STORED`.

  Якщо allowZip64 має значення `True` (за замовчуванням), zipfile створюватиме ZIP-файли з розширеннями ZIP64, якщо розмір zip-файлу перевищує 4 ГБ. Якщо значення `false`, `zipfile` викличе виняток, коли файл ZIP вимагатиме розширення ZIP64.

  Параметр compresslevel керує рівнем стиснення, який використовується під час запису файлів до архіву. Якщо використовується `ZIP_STORED` або `ZIP_LZMA`, це не впливає. При використанні `ZIP_DEFLATED` приймаються цілі числа від `0` до `9` (див. `zlib` для отримання додаткової інформації). При використанні `ZIP_BZIP2` приймаються цілі числа від `1` до `9` (див. `bz2` для отримання додаткової інформації).

  Аргумент strict_timestamps, коли встановлено значення `False`, дозволяє заархівувати файли, старіші за 1980-01-01, ціною встановлення позначки часу на 1980-01-01. Подібна поведінка відбувається з файлами, новішими за 2107-12-31, мітка часу також встановлена на обмеження.

  Якщо файл створено в режимі `'w'`, `'x'` або `'a'`, а потім `закрив` без додавання файлів до архіву, відповідний ZIP структури для порожнього архіву будуть записані у файл.

  ZipFile також є контекстним менеджером і тому підтримує оператор `with`. У цьому прикладі myzip закривається після завершення набору операторів `with` — навіть якщо виникає виняток:

      with ZipFile('spam.zip', 'w') as myzip:
          myzip.write('eggs.txt')

  Нове в версії 3.2: Додано можливість використовувати `ZipFile` як контекстний менеджер.

  Змінено в версії 3.3: Додано підтримку стиснення `bzip2` і `lzma`.

  Змінено в версії 3.4: Розширення ZIP64 увімкнено за замовчуванням.

  Змінено в версії 3.5: Додано підтримку запису в потоки, які неможливо шукати. Додано підтримку режиму `'x''`.

  Змінено в версії 3.6: Раніше звичайна помилка `RuntimeError` виникала для нерозпізнаних значень стиснення.

  Змінено в версії 3.6.2: Параметр file приймає path-like object.

  Змінено в версії 3.7: Додайте параметр compresslevel.

  Нове в версії 3.8: The strict_timestamps keyword-only argument

`ZipFile.``close`()

  Закрийте архівний файл. Ви повинні викликати `close()` перед виходом із програми, інакше важливі записи не будуть записані.

`ZipFile.``getinfo`(name)

  Повертає об’єкт `ZipInfo` з інформацією про ім’я члена архіву. Виклик `getinfo()` для імені, яке наразі не міститься в архіві, викличе `KeyError`.

`ZipFile.``infolist`()

  Повертає список, що містить об’єкт `ZipInfo` для кожного члена архіву. Об’єкти розташовані в тому самому порядку, що й їхні записи у фактичному файлі ZIP на диску, якщо було відкрито існуючий архів.

`ZipFile.``namelist`()

  Повернути список учасників архіву за іменами.

`ZipFile.``open`(name, mode='r', pwd=None, *, force_zip64=False)

  Access a member of the archive as a binary file-like object. name can be either the name of a file within the archive or a `ZipInfo` object. The mode parameter, if included, must be `'r'` (the default) or `'w'`. pwd is the password used to decrypt encrypted ZIP files as a `bytes` object.

  `open()` також є контекстним менеджером і тому підтримує оператор `with`:

      with ZipFile('spam.zip') as myzip:
          with myzip.open('eggs.txt') as myfile:
              print(myfile.read())

  With mode `'r'` the file-like object (`ZipExtFile`) is read-only and provides the following methods: `read()`, `readline()`, `readlines()`, `seek()`, `tell()`, `__iter__()`, `__next__()`. These objects can operate independently of the ZipFile.

  За допомогою `mode='w'` повертається записуваний дескриптор файлу, який підтримує метод `write()`. Поки дескриптор файлу з доступом до запису відкритий, спроба прочитати або записати інші файли в ZIP-файл викличе `ValueError`.

  Під час запису файлу, якщо розмір файлу невідомий заздалегідь, але може перевищувати 2 ГіБ, передайте `force_zip64=True`, щоб переконатися, що формат заголовка підтримує великі файли. Якщо розмір файлу відомий заздалегідь, створіть об’єкт `ZipInfo` з набором `file_size` і використовуйте це як параметр name.

  Примітка

  Методи `open()`, `read()` і `extract()` можуть приймати назву файлу або об’єкт `ZipInfo`. Ви оціните це, коли спробуєте прочитати ZIP-файл, який містить учасників із повторюваними іменами.

  Змінено в версії 3.6: Вилучено підтримку `mode='U'`. Використовуйте `io.TextIOWrapper` для читання стиснених текстових файлів у режимі universal newlines.

  Змінено в версії 3.6: `ZipFile.open()` тепер можна використовувати для запису файлів в архів за допомогою параметра `mode='w'`.

  Змінено в версії 3.6: Виклик `open()` для закритого ZipFile викличе `ValueError`. Раніше виникала помилка `RuntimeError`.

`ZipFile.``extract`(member, path=None, pwd=None)

  Extract a member from the archive to the current working directory; member must be its full name or a `ZipInfo` object. Its file information is extracted as accurately as possible. path specifies a different directory to extract to. member can be a filename or a `ZipInfo` object. pwd is the password used for encrypted files as a `bytes` object.

  Повертає створений нормалізований шлях (каталог або новий файл).

  Примітка

  Якщо ім’я файлу-члена є абсолютним шляхом, точку спільного використання диска/UNC і початкові (зворотні) скісні риски буде видалено, наприклад: `///foo/bar` стане `foo/bar` в Unix, а `C:\foo\bar` стає `foo\bar` у Windows. І всі компоненти `".."` в імені файлу-члена буде видалено, наприклад: `../../foo../../ba..r` стане `foo../ba ..r`. У Windows неприпустимі символи (`:`, `<`, `>`, `|`, `"`, `?` і `*`) замінено підкресленням (`_`).

  Змінено в версії 3.6: Виклик `extract()` для закритого ZipFile викличе `ValueError`. Раніше виникала помилка `RuntimeError`.

  Змінено в версії 3.6.2: Параметр path приймає path-like object.

`ZipFile.``extractall`(path=None, members=None, pwd=None)

  Extract all members from the archive to the current working directory. path specifies a different directory to extract to. members is optional and must be a subset of the list returned by `namelist()`. pwd is the password used for encrypted files as a `bytes` object.

  Попередження

  Ніколи не витягуйте архіви з ненадійних джерел без попередньої перевірки. Цілком можливо, що файли створюються поза шляхом, напр. члени, які мають абсолютні імена файлів, що починаються з `"/"` або імена файлів з двома крапками `".."`. Цей модуль намагається запобігти цьому. Дивіться примітку `extract()`.

  Змінено в версії 3.6: Виклик `extractall()` для закритого ZipFile викличе `ValueError`. Раніше виникала помилка `RuntimeError`.

  Змінено в версії 3.6.2: Параметр path приймає path-like object.

`ZipFile.``printdir`()

  Роздрукуйте зміст архіву в `sys.stdout`.

`ZipFile.``setpassword`(pwd)

  Set pwd (a `bytes` object) as default password to extract encrypted files.

`ZipFile.``read`(name, pwd=None)

  Return the bytes of the file name in the archive. name is the name of the file in the archive, or a `ZipInfo` object. The archive must be open for read or append. pwd is the password used for encrypted files as a `bytes` object and, if specified, overrides the default password set with `setpassword()`. Calling `read()` on a ZipFile that uses a compression method other than `ZIP_STORED`, `ZIP_DEFLATED`, `ZIP_BZIP2` or `ZIP_LZMA` will raise a `NotImplementedError`. An error will also be raised if the corresponding compression module is not available.

  Змінено в версії 3.6: Виклик `read()` для закритого ZipFile викличе `ValueError`. Раніше виникала помилка `RuntimeError`.

`ZipFile.``testzip`()

  Прочитайте всі файли в архіві та перевірте їх CRC і заголовки файлів. Повертає назву першого несправного файлу або повертає `None`.

  Змінено в версії 3.6: Виклик `testzip()` для закритого ZipFile викличе `ValueError`. Раніше виникала помилка `RuntimeError`.

`ZipFile.``write`(filename, arcname=None, compress_type=None, compresslevel=None)

  Запишіть файл із назвою filename в архів, присвоївши йому ім’я архіву arcname (за замовчуванням це буде те саме, що filename, але без літери диска та з видаленими роздільниками шляху на початку). Якщо задано, compress_type замінює значення, надане для параметра compression у конструкторі для нового запису. Подібним чином compresslevel замінить конструктор, якщо він заданий. Архів має бути відкритий у режимі `'w'`, `'x'` або `'a'`.

  Примітка

  Імена архівів мають бути відносними до кореня архіву, тобто вони не повинні починатися з роздільника шляху.

  Примітка

  Якщо `arcname` (або `filename`, якщо `arcname` не вказано) містить нульовий байт, ім’я файлу в архіві буде скорочено на нульовий байт.

  Примітка

  Слеш на початку назви файлу може призвести до того, що архів буде неможливо відкрити в деяких програмах zip у системах Windows.

  Змінено в версії 3.6: Виклик `write()` для ZipFile, створеного в режимі `'r'`, або закритого ZipFile призведе до `ValueError`. Раніше виникала помилка `RuntimeError`.

`ZipFile.``writestr`(zinfo_or_arcname, data, compress_type=None, compresslevel=None)

  Записати файл в архів. Вмістом є дані, які можуть бути екземпляром `str` або `bytes`; якщо це `str`, він спочатку кодується як UTF-8. zinfo_or_arcname — це ім’я файлу, яке буде надано в архіві, або екземпляр `ZipInfo`. Якщо це екземпляр, потрібно вказати принаймні назву файлу, дату та час. Якщо це ім’я, дата й час встановлюються на поточну дату й час. Архів необхідно відкрити в режимі `'w'`, `'x'` або `'a'`.

  Якщо задано, compress_type перевизначає значення, надане для параметра compression у конструкторі для нового запису або в zinfo_or_arcname (якщо це екземпляр `ZipInfo`). Подібним чином compresslevel замінить конструктор, якщо він заданий.

  Примітка

  Під час передачі екземпляра `ZipInfo` як параметра zinfo_or_arcname буде використовуватися метод стиснення, указаний у члені compress_type даного екземпляра `ZipInfo`. За замовчуванням конструктор `ZipInfo` встановлює для цього елемента `ZIP_STORED`.

  Змінено в версії 3.2: Аргумент compress_type.

  Змінено в версії 3.6: Виклик `writestr()` для ZipFile, створеного в режимі `'r'`, або закритого ZipFile призведе до `ValueError`. Раніше виникала помилка `RuntimeError`.

Також доступні такі атрибути даних:

`ZipFile.``filename`

  Назва ZIP-файлу.

`ZipFile.``debug`

  Рівень вихідних даних налагодження для використання. Це значення можна встановити від `0` (за замовчуванням, без виводу) до `3` (найбільший вивід). Інформація про налагодження записується в `sys.stdout`.

`ZipFile.``comment`

  Коментар, пов’язаний із ZIP-файлом як об’єкт `bytes`. Якщо призначати коментар екземпляру `ZipFile`, створеному в режимі `'w'`, `'x'` або `'a'`, він не повинен бути довшим за 65535 байт. Коментарі, довші за цей, буде скорочено.

## Об’єкти шляху

class `zipfile.``Path`(root, at='')

  Створіть об’єкт Path із `кореневого` zip-файлу (який може бути екземпляром `ZipFile` або `file`, придатним для передачі в конструктор `ZipFile`).

  `at` визначає розташування цього Шляху в zip-файлі, напр. „dir/file.txt“, „dir/“ або „“. За замовчуванням порожній рядок із зазначенням кореня.

Об’єкти Path надають такі особливості об’єктів `pathlib.Path`:

Об’єкти шляху можна пройти за допомогою оператора `/` або `joinpath`.

`Path.``name`

  Остаточний компонент шляху.

`Path.``open`(mode='r', *, pwd, **)

  Викликати `ZipFile.open()` на поточному шляху. Дозволяє відкривати для читання чи запису, текстового чи двійкового файлу за допомогою підтримуваних режимів: «r», «w», «rb», «wb». Позиційні та ключові аргументи передаються до `io.TextIOWrapper`, коли відкриваються як текст, і ігноруються в інших випадках. `pwd` — це параметр `pwd` для `ZipFile.open()`.

  Змінено в версії 3.9: Додано підтримку текстового та бінарного режимів для відкритого. Типовим режимом тепер є текст.

  Змінено в версії 3.10.10: The `encoding` parameter can be supplied as a positional argument without causing a `TypeError`. As it could in 3.9. Code needing to be compatible with unpatched 3.10 and 3.11 versions must pass all `io.TextIOWrapper` arguments, `encoding` included, as keywords.

`Path.``iterdir`()

  Перелічіть дочірні елементи поточного каталогу.

`Path.``is_dir`()

  Повертає `True`, якщо поточний контекст посилається на каталог.

`Path.``is_file`()

  Повертає `True`, якщо поточний контекст посилається на файл.

`Path.``exists`()

  Повертає `True`, якщо поточний контекст посилається на файл або каталог у файлі zip.

`Path.``read_text`(*, **)

  Читати поточний файл як текст Юнікод. Позиційні та ключові аргументи передаються до `io.TextIOWrapper` (за винятком `buffer`, який передбачається контекстом).

  Змінено в версії 3.10.10: The `encoding` parameter can be supplied as a positional argument without causing a `TypeError`. As it could in 3.9. Code needing to be compatible with unpatched 3.10 and 3.11 versions must pass all `io.TextIOWrapper` arguments, `encoding` included, as keywords.

`Path.``read_bytes`()

  Читати поточний файл як байти.

`Path.``joinpath`(*other)

  Повертає новий об’єкт Path із об’єднаними аргументами other. Наступні еквівалентні:

      >>> Path(...).joinpath('child').joinpath('grandchild')
      >>> Path(...).joinpath('child', 'grandchild')
      >>> Path(...) / 'child' / 'grandchild'

  Змінено в версії 3.10: До 3.10 `joinpath` був незадокументованим і приймав лише один параметр.

## Об’єкти PyZipFile

Конструктор `PyZipFile` приймає ті самі параметри, що й конструктор `ZipFile`, і один додатковий параметр, optimize.

class `zipfile.``PyZipFile`(file, mode='r', compression=ZIP_STORED, allowZip64=True, optimize=- 1)

  Нове в версії 3.2: The optimize parameter.

  Змінено в версії 3.4: Розширення ZIP64 увімкнено за замовчуванням.

  Екземпляри мають один метод на додаток до методів об’єктів `ZipFile`:

  `writepy`(pathname, basename='', filterfunc=None)

    Знайдіть файли `*.py` і додайте відповідний файл до архіву.

    Якщо параметр optimize для `PyZipFile` не було надано або `-1`, відповідний файл є файлом `*.pyc`, який компілюється за потреби.

    Якщо параметр optimize для `PyZipFile` був `0`, `1` або `2`, лише файли з таким рівнем оптимізації (див. `compile()`) додаються до архів, компілюючи при необхідності.

    Якщо pathname є файлом, ім’я файлу має закінчуватися на `.py`, і лише (відповідний `*.pyc`) файл додається на верхньому рівні (без інформації про шлях). Якщо pathname — це файл, який не закінчується на `.py`, виникне `RuntimeError`. Якщо це каталог, а каталог не є каталогом пакунків, тоді всі файли `*.pyc` додаються на верхньому рівні. Якщо каталог є каталогом пакунків, то всі файли `*.pyc` додаються під назвою пакета як шлях до файлу, і якщо будь-які підкаталоги є каталогами пакетів, усі вони додаються рекурсивно в порядку сортування.

    basename призначено лише для внутрішнього використання.

    filterfunc, якщо задано, має бути функцією, яка приймає один рядковий аргумент. Перед додаванням до архіву буде передано кожен шлях (включно з кожним окремим повним шляхом до файлу). Якщо filterfunc повертає хибне значення, шлях не буде додано, а якщо це каталог, його вміст ігноруватиметься. Наприклад, якщо всі наші тестові файли знаходяться або в каталогах `test`, або починаються з рядка `test_`, ми можемо використати filterfunc, щоб виключити їх:

        >>> zf = PyZipFile('myprog.zip')
        >>> def notests(s):
        ...     fn = os.path.basename(s)
        ...     return (not (fn == 'test' or fn.startswith('test_')))
        >>> zf.writepy('myprog', filterfunc=notests)

    Метод `writepy()` створює архіви з такими назвами файлів:

        string.pyc                   # Top level name
        test/__init__.pyc            # Package directory
        test/testall.pyc             # Module test.testall
        test/bogus/__init__.pyc      # Subpackage directory
        test/bogus/myfile.pyc        # Submodule test.bogus.myfile

    Нове в версії 3.4: The filterfunc parameter.

    Змінено в версії 3.6.2: Параметр pathname приймає path-like object.

    Змінено в версії 3.7: Рекурсія сортує записи каталогу.

## Об’єкти ZipInfo

Екземпляри класу `ZipInfo` повертаються методами `getinfo()` і `infolist()` об’єктів `ZipFile`. Кожен об’єкт зберігає інформацію про один член ZIP-архіву.

Існує один метод класу для створення екземпляра `ZipInfo` для файлу файлової системи:

classmethod `ZipInfo.``from_file`(filename, arcname=None, *, strict_timestamps=True)

  Створіть екземпляр `ZipInfo` для файлу у файловій системі, готуючись до додавання його до файлу zip.

  ім’я файлу має бути шляхом до файлу або каталогу у файловій системі.

  Якщо вказано arcname, воно використовується як ім’я в архіві. Якщо arcname не вказано, ім’я буде таким самим, як filename, але з усією літерою диска та роздільниками шляху на початку.

  Аргумент strict_timestamps, коли встановлено значення `False`, дозволяє заархівувати файли, старіші за 1980-01-01, ціною встановлення позначки часу на 1980-01-01. Подібна поведінка відбувається з файлами, новішими за 2107-12-31, мітка часу також встановлена на обмеження.

  Нове в версії 3.6.

  Змінено в версії 3.6.2: Параметр filename приймає path-like object.

  Нове в версії 3.8: The strict_timestamps keyword-only argument

Екземпляри мають такі методи та атрибути:

`ZipInfo.``is_dir`()

  Повертає `True`, якщо цей елемент архіву є каталогом.

  Тут використовується назва запису: каталоги завжди мають закінчуватися на `/`.

  Нове в версії 3.6.

`ZipInfo.``filename`

  Назва файлу в архіві.

`ZipInfo.``date_time`

  Час і дата останньої зміни учасника архіву. Це кортеж із шести значень:

  Індекс | Значення
  --- | ---
  `0` | Рік (>= 1980)
  `1` | Місяць (один)
  `2` | День місяця (за першою основою)
  `3` | Години (від нуля)
  `4` | Хвилини (від нуля)
  `5` | Секунди (від нуля)

  Примітка

  Формат файлу ZIP не підтримує мітки часу до 1980 року.

`ZipInfo.``compress_type`

  Тип стиснення для елемента архіву.

`ZipInfo.``comment`

  Коментар для окремого елемента архіву як об’єкт `bytes`.

`ZipInfo.``extra`

  Дані поля розширення. Примітка до програми PKZIP містить деякі коментарі щодо внутрішньої структури даних, що містяться в цьому об’єкті `bytes`.

`ZipInfo.``create_system`

  Система, яка створила ZIP-архів.

`ZipInfo.``create_version`

  Версія PKZIP, яка створила архів ZIP.

`ZipInfo.``extract_version`

  Для розпакування архіву потрібна версія PKZIP.

`ZipInfo.``reserved`

  Має бути нуль.

`ZipInfo.``flag_bits`

  Біти прапора ZIP.

`ZipInfo.``volume`

  Номер тому заголовка файлу.

`ZipInfo.``internal_attr`

  Внутрішні атрибути.

`ZipInfo.``external_attr`

  Атрибути зовнішнього файлу.

`ZipInfo.``header_offset`

  Байтовий зсув до заголовка файлу.

`ZipInfo.``CRC`

  CRC-32 нестисненого файлу.

`ZipInfo.``compress_size`

  Розмір стислих даних.

`ZipInfo.``file_size`

  Розмір нестиснутого файлу.

## Інтерфейс командного рядка

Модуль `zipfile` забезпечує простий інтерфейс командного рядка для взаємодії з ZIP-архівами.

Якщо ви хочете створити новий ZIP-архів, укажіть його назву після параметра `-c`, а потім перелічіть імена файлів, які потрібно включити:

    $ python -m zipfile -c monty.zip spam.txt eggs.txt

Передача каталогу також прийнятна:

    $ python -m zipfile -c monty.zip life-of-brian_1979/

Якщо ви хочете розпакувати ZIP-архів у вказаний каталог, скористайтеся параметром `-e`:

    $ python -m zipfile -e monty.zip target-dir/

Щоб отримати список файлів у ZIP-архіві, використовуйте параметр `-l`:

    $ python -m zipfile -l monty.zip

### Параметри командного рядка

`-l``<zipfile>`
`--list``<zipfile>`

  Список файлів у zip-файлі.

`-c``<zipfile> <source1> ... <sourceN>`
`--create``<zipfile> <source1> ... <sourceN>`

  Створіть zip-файл із вихідних файлів.

`-e``<zipfile> <output_dir>`
`--extract``<zipfile> <output_dir>`

  Розпакуйте zip-файл у цільовий каталог.

`-t``<zipfile>`
`--test``<zipfile>`

  Перевірте, чи дійсний файл zip.

## Підводні камені декомпресії

Видобуток у модулі zipfile може завершитися помилкою через деякі помилки, перелічені нижче.

### З самого файлу

Декомпресія може не вдатися через неправильний пароль/контрольну суму CRC/формат ZIP або непідтримуваний метод стиснення/дешифрування.

### Обмеження файлової системи

Перевищення обмежень на різні файлові системи може призвести до збою декомпресії. Наприклад, допустимі символи в записах каталогу, довжина імені файлу, довжина шляху, розмір окремого файлу та кількість файлів тощо.

### Обмеження ресурсів

Відсутність пам’яті або об’єму диска може призвести до збою декомпресії. Наприклад, бомби декомпресії (також ZIP-бомба) застосовуються до бібліотеки zip-файлів, що може спричинити виснаження обсягу диска.

### Переривання

Переривання під час декомпресії, наприклад натискання клавіш Control-C або припинення процесу декомпресії, може призвести до неповного розпакування архіву.

### Типова поведінка вилучення

Незнання поведінки вилучення за замовчуванням може призвести до неочікуваних результатів декомпресії. Наприклад, якщо двічі розпаковувати той самий архів, він перезаписує файли без запиту.