zipfile.md
1> **Источник:** https://python-all.ru/3.3/library/zipfile.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 13.5. [`zipfile`](https://python-all.ru/3.3/library/zipfile.html#module-zipfile) – Работа с ZIP-архивами89**Исходный код:** [Lib/zipfile.py](https://python-all.ru/src/3.3/Lib/zipfile.py)1011---1213Формат ZIP – распространённый стандарт архивации и сжатия. Этот модуль предоставляет инструменты для создания, чтения, записи, добавления и просмотра содержимого ZIP-файлов. Любое продвинутое использование модуля требует понимания формата, описанного в [PKZIP Application Note](https://python-all.ru/3.3/library/zipfile.html).1415Модуль пока не поддерживает многодисковые ZIP-файлы. Он может обрабатывать ZIP-файлы, использующие расширения ZIP64 (то есть ZIP-файлы размером более 4 ГБ). Поддерживается расшифровка зашифрованных файлов в ZIP-архивах, но пока невозможно создать зашифрованный файл. Расшифровка выполняется очень медленно, так как реализована на чистом Python, а не на C.1617Модуль определяет следующие элементы:1819#### `exception zipfile.BadZipFile`2021Исключение, возникающее при повреждённых ZIP-файлах.2223Новое в версии 3.2.2425#### `exception zipfile.BadZipfile`2627Псевдоним [`BadZipFile`](https://python-all.ru/3.3/library/zipfile.html#zipfile.BadZipFile) для совместимости со старыми версиями Python.2829Устарело с версии 3.2.3031#### `exception zipfile.LargeZipFile`3233Исключение, возникающее, когда ZIP-файлу требуется функциональность ZIP64, но она не включена.3435#### `class zipfile.ZipFile`3637Класс для чтения и записи ZIP-файлов. Подробнее о конструкторе см. раздел [*Объекты ZipFile*](https://python-all.ru/3.3/library/zipfile.html#zipfile-objects).3839#### `class zipfile.PyZipFile`4041Класс для создания ZIP-архивов, содержащих библиотеки Python.4243#### `class zipfile.ZipInfo(filename='NoName', date_time=(1980, 1, 1, 0, 0, 0))`4445Класс, используемый для представления информации об элементе архива. Экземпляры этого класса возвращаются методами [`getinfo()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.getinfo) и [`infolist()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.infolist) объектов [`ZipFile`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile). Большинству пользователей модуля [`zipfile`](https://python-all.ru/3.3/library/zipfile.html#module-zipfile) не нужно создавать такие объекты, достаточно использовать те, что созданы этим модулем. Параметр *filename* должен содержать полное имя элемента архива, а *date\_time* – кортеж из шести полей, описывающих время последнего изменения файла; эти поля описаны в разделе [*ZipInfo Objects*](https://python-all.ru/3.3/library/zipfile.html#zipinfo-objects).4647#### `zipfile.is_zipfile(filename)`4849Возвращает `True`, если *filename* является допустимым ZIP-файлом на основе его сигнатуры, в противном случае возвращает `False`. Параметр *filename* может быть файлом или файлоподобным объектом.5051Изменено в версии 3.1: Добавлена поддержка файлов и файлоподобных объектов.5253#### `zipfile.ZIP_STORED`5455Числовая константа для несжатого элемента архива.5657#### `zipfile.ZIP_DEFLATED`5859Числовая константа для обычного метода сжатия ZIP. Требует модуль [`zlib`](https://python-all.ru/3.3/library/zlib.html#module-zlib).6061#### `zipfile.ZIP_BZIP2`6263Числовая константа для метода сжатия BZIP2. Требует модуль [`bz2`](https://python-all.ru/3.3/library/bz2.html#module-bz2).6465Новое в версии 3.3.6667#### `zipfile.ZIP_LZMA`6869Числовая константа для метода сжатия LZMA. Требует модуль [`lzma`](https://python-all.ru/3.3/library/lzma.html#module-lzma).7071Новое в версии 3.3.7273> **Примечание**74>75> Спецификация формата ZIP поддерживает сжатие bzip2 с 2001 года и сжатие LZMA с 2006 года. Однако некоторые инструменты (включая старые версии Python) не поддерживают эти методы сжатия и могут либо полностью отказаться обрабатывать ZIP-файл, либо не извлечь отдельные файлы.7677> **См. также**78>79> **[Примечание по применению PKZIP](https://python-all.ru/3.3/library/zipfile.html)**80>81> Документация по формату ZIP-файлов от Фила Каца, создателя формата и используемых алгоритмов.82>83> **[Домашняя страница Info-ZIP](https://python-all.ru/3.3/library/zipfile.html)**84>85> Информация о программах для работы с ZIP-архивами и библиотеках для разработки проекта Info-ZIP.8687## 13.5.1. Объекты ZipFile8889#### `class zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=False)`9091Открывает ZIP-файл. Параметр *file* может быть путём к файлу (строкой) или объектом, похожим на файл. Параметр *mode* должен быть `'r'` для чтения существующего файла, `'w'` для усечения и записи нового файла или `'a'` для добавления в существующий файл. Если *mode* равен `'a'` и *file* ссылается на существующий ZIP-файл, то в него будут добавлены дополнительные файлы. Если *file* не является ZIP-файлом, то к нему будет добавлен новый ZIP-архив. Это предназначено для добавления ZIP-архива в другой файл (например, `python.exe`). Если *mode* равен `a` и файл вовсе не существует, он будет создан. *compression* – это метод сжатия ZIP, используемый при записи архива, и должен быть [`ZIP_STORED`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZIP_STORED), [`ZIP_DEFLATED`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZIP_DEFLATED), [`ZIP_BZIP2`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZIP_BZIP2) или [`ZIP_LZMA`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZIP_LZMA); нераспознанные значения вызовут [`RuntimeError`](https://python-all.ru/3.3/library/exceptions.html#RuntimeError). Если указаны [`ZIP_DEFLATED`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZIP_DEFLATED), [`ZIP_BZIP2`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZIP_BZIP2) или [`ZIP_LZMA`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZIP_LZMA), но соответствующий модуль ([`zlib`](https://python-all.ru/3.3/library/zlib.html#module-zlib), [`bz2`](https://python-all.ru/3.3/library/bz2.html#module-bz2) или [`lzma`](https://python-all.ru/3.3/library/lzma.html#module-lzma)) недоступен, также будет возбуждено [`RuntimeError`](https://python-all.ru/3.3/library/exceptions.html#RuntimeError). По умолчанию используется [`ZIP_STORED`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZIP_STORED). Если *allowZip64* равен `True`, zipfile будет создавать ZIP-файлы, использующие расширения ZIP64, когда размер архива превышает 2 GiB. Если же установлено ложное значение (по умолчанию), [`zipfile`](https://python-all.ru/3.3/library/zipfile.html#module-zipfile) возбудит исключение, когда ZIP-файлу потребуются расширения ZIP64. Расширения ZIP64 отключены по умолчанию, так как стандартные команды **zip** и **unzip** в Unix (утилиты InfoZIP) не поддерживают их.9293Если файл создан в режиме `'a'` или `'w'`, а затем [`закрыт`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.close) без добавления файлов в архив, в файл будут записаны соответствующие структуры ZIP для пустого архива.9495ZipFile также является контекстным менеджером, поэтому поддерживает инструкцию [`with`](https://python-all.ru/3.3/reference/compound_stmts.html#with). В примере *myzip* закрывается после завершения блока инструкции [`with`](https://python-all.ru/3.3/reference/compound_stmts.html#with), даже если возникло исключение:9697```python98with ZipFile('spam.zip', 'w') as myzip:99 myzip.write('eggs.txt')100```101102Новое в версии 3.2: Добавлена возможность использовать [`ZipFile`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile) в качестве контекстного менеджера.103104Изменено в версии 3.3: Добавлена поддержка сжатия [`bzip2`](https://python-all.ru/3.3/library/bz2.html#module-bz2) и [`lzma`](https://python-all.ru/3.3/library/lzma.html#module-lzma).105106#### `ZipFile.close()`107108Закрывает файл архива. Необходимо вызвать [`close()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.close) перед выходом из программы, иначе важные записи не будут записаны.109110#### `ZipFile.getinfo(name)`111112Возвращает объект [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo) с информацией об элементе архива *name*. Вызов [`getinfo()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.getinfo) для имени, отсутствующего в архиве, возбуждает [`KeyError`](https://python-all.ru/3.3/library/exceptions.html#KeyError).113114#### `ZipFile.infolist()`115116Возвращает список, содержащий объект [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo) для каждого элемента архива. Объекты расположены в том же порядке, что и соответствующие записи в реальном ZIP- файле на диске (если был открыт существующий архив).117118#### `ZipFile.namelist()`119120Возвращает список элементов архива по именам.121122#### `ZipFile.open(name, mode='r', pwd=None)`123124Извлекает элемент из архива в виде файлоподобного объекта (ZipExtFile). *name* – это имя файла в архиве или объект [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo). Параметр *mode*, если указан, должен быть одним из следующих: `'r'` (по умолчанию), `'U'` или `'rU'`. Выбор `'U'` или `'rU'` включает поддержку [*универсальных символов новой строки*](https://python-all.ru/3.3/glossary.html#term-universal-newlines) в объекте, доступном только для чтения. *pwd* – это пароль для зашифрованных файлов. Вызов [`open()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.open) на закрытом ZipFile вызовет [`RuntimeError`](https://python-all.ru/3.3/library/exceptions.html#RuntimeError).125126> **Примечание**127>128> Файлоподобный объект доступен только для чтения и предоставляет следующие методы: [`read()`](https://python-all.ru/3.3/library/io.html#io.BufferedIOBase.read), [`readline()`](https://python-all.ru/3.3/library/io.html#io.IOBase.readline), [`readlines()`](https://python-all.ru/3.3/library/io.html#io.IOBase.readlines), [`__iter__()`](https://python-all.ru/3.3/reference/datamodel.html#object.__iter__), [`__next__()`](https://python-all.ru/3.3/library/stdtypes.html#iterator.__next__).129130> **Примечание**131>132> Если ZipFile был создан путём передачи файлоподобного объекта в качестве первого аргумента конструктора, то объект, возвращаемый [`open()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.open), разделяет файловый указатель ZipFile. В таких условиях объект, возвращаемый [`open()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.open), не следует использовать после выполнения любых дополнительных операций над объектом ZipFile. Если ZipFile был создан путём передачи строки (имени файла) в качестве первого аргумента конструктора, то [`open()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.open) создаст новый файловый объект, который будет удерживаться ZipExtFile, что позволяет ему работать независимо от ZipFile.133134> **Примечание**135>136> Методы [`open()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.open), [`read()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.read) и [`extract()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.extract) могут принимать имя файла или объект [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo). Это пригодится при попытке прочитать ZIP-файл, содержащий элементы с повторяющимися именами.137138#### `ZipFile.extract(member, path=None, pwd=None)`139140Извлекает элемент из архива в текущий рабочий каталог; *member* должно быть его полным именем или объектом [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo)). Информация о файле извлекается максимально точно. *path* задаёт другой каталог для извлечения. *member* может быть именем файла или объектом [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo). *pwd* – это пароль для зашифрованных файлов.141142> **Примечание**143>144> Если имя файла элемента является абсолютным путём, то буква диска/UNC-точка и начальные (обратные) слеши будут удалены, например: `///foo/bar` становится `foo/bar` в Unix, а `C:\foo\bar` становится `foo\bar` в Windows. И все компоненты `".."` в имени файла элемента будут удалены, например: `../../foo../../ba..r` становится `foo../ba..r`. В Windows недопустимые символы (`:`, `<`, `>`, `|`, `"`, `?` и `*`) заменяются символом подчёркивания (`_`).145146#### `ZipFile.extractall(path=None, members=None, pwd=None)`147148Извлекает все элементы из архива в текущий рабочий каталог. *path* задаёт другой каталог для извлечения. *members* является необязательным и должен быть подмножеством списка, возвращаемого [`namelist()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.namelist). *pwd* – это пароль для зашифрованных файлов.149150> **Предупреждение**151>152> Никогда не извлекайте архивы из ненадёжных источников без предварительной проверки. Возможно создание файлов за пределами *path*, например, элементов с абсолютными именами, начинающимися с `"/"`, или с именами, содержащими две точки `".."`.153154Изменено в версии 3.3.1: Модуль zipfile пытается это предотвратить. См. примечание к [`extract()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.extract).155156#### `ZipFile.printdir()`157158Выводит оглавление архива в `sys.stdout`.159160#### `ZipFile.setpassword(pwd)`161162Устанавливает *pwd* в качестве пароля по умолчанию для извлечения зашифрованных файлов.163164#### `ZipFile.read(name, pwd=None)`165166Возвращает байты файла *name* в архиве. *name* – это имя файла в архиве или объект [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo). Архив должен быть открыт для чтения или добавления. *pwd* – пароль, используемый для зашифрованных файлов; если указан, он переопределяет пароль по умолчанию, заданный с помощью [`setpassword()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.setpassword). Вызов [`read()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.read) на закрытом ZipFile приведёт к возникновению [`RuntimeError`](https://python-all.ru/3.3/library/exceptions.html#RuntimeError).167168#### `ZipFile.testzip()`169170Читает все файлы в архиве и проверяет их CRC и заголовки файлов. Возвращает имя первого повреждённого файла или `None`, если все файлы в порядке. Вызов [`testzip()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.testzip) на закрытом ZipFile вызовет [`RuntimeError`](https://python-all.ru/3.3/library/exceptions.html#RuntimeError).171172#### `ZipFile.write(filename, arcname=None, compress_type=None)`173174Записывает файл с именем *filename* в архив, присваивая ему имя в архиве *arcname* (по умолчанию оно будет таким же, как *filename*, но без буквы диска и с удалёнными начальными разделителями пути). Если указан, *compress\_type* переопределяет значение, заданное для параметра *compression* конструктора для новой записи. Архив должен быть открыт в режиме `'w'` или `'a'` – вызов [`write()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.write) на ZipFile, созданном в режиме `'r'`, вызовет [`RuntimeError`](https://python-all.ru/3.3/library/exceptions.html#RuntimeError). Вызов [`write()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.write) на закрытом ZipFile вызовет [`RuntimeError`](https://python-all.ru/3.3/library/exceptions.html#RuntimeError).175176> **Примечание**177>178> Официальной кодировки имён файлов для ZIP-файлов не существует. Если используются имена файлов в Unicode, необходимо преобразовать их в байтовые строки в нужной кодировке перед передачей в [`write()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.write). WinZip интерпретирует все имена файлов как закодированные в CP437, также известной как DOS Latin.179180> **Примечание**181>182> Архивные имена должны быть относительными по отношению к корню архива, то есть не должны начинаться с разделителя пути.183184> **Примечание**185>186> Если `arcname` (или `filename`, если `arcname` не указан) содержит нулевой байт, имя файла в архиве будет обрезано по нулевому байту.187188#### `ZipFile.writestr(zinfo_or_arcname, bytes[, compress_type])`189190Записывает строку *bytes* в архив; *zinfo\_or\_arcname* – это либо имя файла, которое будет присвоено в архиве, либо экземпляр [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo). Если это экземпляр, необходимо указать как минимум имя файла, дату и время. Если это имя, дата и время устанавливаются на текущие. Архив должен быть открыт в режиме `'w'` или `'a'` – вызов [`writestr()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.writestr) на ZipFile, созданном в режиме `'r'`, вызовет [`RuntimeError`](https://python-all.ru/3.3/library/exceptions.html#RuntimeError). Вызов [`writestr()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.writestr) на закрытом ZipFile вызовет [`RuntimeError`](https://python-all.ru/3.3/library/exceptions.html#RuntimeError).191192Если указан, *compress\_type* переопределяет значение, заданное для параметра *compression* конструктора для новой записи, или значение в *zinfo\_or\_arcname* (если это экземпляр [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo)).193194> **Примечание**195>196> При передаче экземпляра [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo) в качестве параметра *zinfo\_or\_arcname* используемый метод сжатия будет тем, который указан в члене *compress\_type* данного экземпляра [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo). По умолчанию конструктор [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo) устанавливает этот член в [`ZIP_STORED`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZIP_STORED).197198Изменено в версии 3.2: Аргумент *compress\_type*.199200Также доступны следующие атрибуты данных:201202#### `ZipFile.debug`203204Уровень отладочного вывода. Может быть установлен от `0` (по умолчанию, без вывода) до `3` (максимальный вывод). Отладочная информация записывается в `sys.stdout`.205206#### `ZipFile.comment`207208Текст комментария, связанного с ZIP-файлом. Если присваивается комментарий экземпляру [`ZipFile`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile), созданному в режиме 'a' или 'w', это должна быть строка длиной не более 65535 байт. Комментарии длиннее этого значения будут обрезаны в записанном архиве при вызове [`close()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.close).209210## 13.5.2. Объекты PyZipFile211212Конструктор [`PyZipFile`](https://python-all.ru/3.3/library/zipfile.html#zipfile.PyZipFile) принимает те же параметры, что и конструктор [`ZipFile`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile), и один дополнительный параметр *optimize*.213214#### `class zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=False, optimize=-1)`215216Новое в версии 3.2: Параметр *optimize*.217218Помимо методов, имеющихся у объектов [`ZipFile`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile), у экземпляров есть один дополнительный метод:219220#### `writepy(pathname, basename='')`221222Ищет файлы `*.py` и добавляет соответствующий файл в архив.223224Если параметр *optimize* конструктора [`PyZipFile`](https://python-all.ru/3.3/library/zipfile.html#zipfile.PyZipFile) не был задан или равен `-1`, то соответствующим файлом будет `*.pyo`, если такой доступен, иначе `*.pyc`, при необходимости компилируя исходный код.225226Если параметр *optimize* конструктора [`PyZipFile`](https://python-all.ru/3.3/library/zipfile.html#zipfile.PyZipFile) был равен `0`, `1` или `2`, в архив добавляются только файлы с этим уровнем оптимизации (см. [`compile()`](https://python-all.ru/3.3/library/functions.html#compile)), при необходимости компилируя исходный код.227228Если путь является файлом, имя файла должно заканчиваться на `.py`, и на верхний уровень (без информации о пути) добавляется только соответствующий файл `*.py[co]`. Если путь является файлом, который не заканчивается на `.py`, будет возбуждено [`RuntimeError`](https://python-all.ru/3.3/library/exceptions.html#RuntimeError). Если это каталог, и этот каталог не является каталогом пакета, то на верхнем уровне добавляются все файлы `*.py[co]`. Если каталог является пакетным, то все `*.py[co]` добавляются под именем пакета в качестве пути к файлу, и если какие-либо подкаталоги являются пакетными, все они добавляются рекурсивно. *basename* предназначен только для внутреннего использования. Метод [`writepy()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.PyZipFile.writepy) создаёт архивы с именами файлов, как в примере:229230```python231string.pyc # Имя верхнего уровня232test/__init__.pyc # Каталог пакета233test/testall.pyc # Модуль test.testall234test/bogus/__init__.pyc # Каталог подпакета235test/bogus/myfile.pyc # Подмодуль test.bogus.myfile236```237238## 13.5.3. Объекты ZipInfo239240Экземпляры класса [`ZipInfo`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipInfo) возвращаются методами [`getinfo()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.getinfo) и [`infolist()`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile.infolist) объектов [`ZipFile`](https://python-all.ru/3.3/library/zipfile.html#zipfile.ZipFile). Каждый объект хранит информацию об одном элементе ZIP-архива.241242Экземпляры имеют следующие атрибуты:243244#### `ZipInfo.filename`245246Имя файла в архиве.247248#### `ZipInfo.date_time`249250Время и дата последнего изменения элемента архива. Это кортеж из шести значений:251252| Индекс | Значение |253| --- | --- |254| `0` | Год (\>= 1980) |255| `1` | Месяц (начиная с 1) |256| `2` | День месяца (начиная с 1) |257| `3` | Часы (начиная с 0) |258| `4` | Минуты (начиная с 0) |259| `5` | Секунды (начиная с 0) |260261> **Примечание**262>263> Формат ZIP-файлов не поддерживает метки времени до 1980 года.264265#### `ZipInfo.compress_type`266267Тип сжатия для элемента архива.268269#### `ZipInfo.comment`270271Комментарий для отдельного элемента архива.272273#### `ZipInfo.extra`274275Данные поля расширения. В [Примечании к приложению PKZIP](https://python-all.ru/3.3/library/zipfile.html) содержатся комментарии о внутренней структуре данных, содержащихся в этой строке.276277#### `ZipInfo.create_system`278279Система, создавшая ZIP-архив.280281#### `ZipInfo.create_version`282283Версия PKZIP, создавшая ZIP-архив.284285#### `ZipInfo.extract_version`286287Версия PKZIP, необходимая для извлечения архива.288289#### `ZipInfo.reserved`290291Должно быть равно нулю.292293#### `ZipInfo.flag_bits`294295Биты флагов ZIP.296297#### `ZipInfo.volume`298299Номер тома заголовка файла.300301#### `ZipInfo.internal_attr`302303Внутренние атрибуты.304305#### `ZipInfo.external_attr`306307Внешние атрибуты файла.308309#### `ZipInfo.header_offset`310311Смещение в байтах до заголовка файла.312313#### `ZipInfo.CRC`314315CRC-32 несжатого файла.316317#### `ZipInfo.compress_size`318319Размер сжатых данных.320321#### `ZipInfo.file_size`322323Размер несжатого файла.324