zipfile
— Работа с ZIP-архивами¶
Исходный код: Lib/zipfile.py
Формат файла ZIP является общепринятым стандартом архивирования и сжатия. Этот модуль предоставляет инструменты для создания, чтения, записи, добавления и отображения ZIP-файлов. Для любого расширенного использования этого модуля потребуется понимание формата, как определено в PKZIP Application Note.
В настоящее время этот модуль не обрабатывает 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
Класс, реализующий подмножество интерфейса, предоставляемого
pathlib.Path
, включая полный интерфейсimportlib.resources.abc.Traversable
.Добавлено в версии 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
. filename также может быть файлом или файлоподобным объектом.Изменено в версии 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 Application Note
Документация по формату 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, metadata_encoding=None)¶
Откройте ZIP-файл, где file может быть путем к файлу (строка), файлоподобному объекту или path-like object.
Параметр mode должен быть
'r'
для чтения существующего файла,'w'
для обрезки и записи нового файла,'a'
для добавления к существующему файлу или'x'
для создания исключительно и запишите новый файл. Если значение mode равно'x'
, а file ссылается на существующий файл, будет поднято значениеFileExistsError
. Если значение mode равно'a'
и file ссылается на существующий ZIP-файл, то к нему добавляются дополнительные файлы. Если file не ссылается на 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
(по умолчанию), zip-файл будет создавать 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, временная метка также установлена на предельное значение.Когда режим
'r'
, metadata_encoding может быть установлен в качестве имени кодека, который будет использоваться для декодирования метаданных, таких как имена участников и комментарии к ZIP-файлам.Если файл создается в режиме
'w'
,'x'
или'a'
, а затемclosed
без добавления каких-либо файлов в архив, в файл будут записаны соответствующие ZIP-структуры для пустого архива.Zip-файл также является контекстным менеджером и, следовательно, поддерживает инструкцию
with
. В примере myzip закрывается после завершения набора инструкцийwith
, даже если возникает исключение:with ZipFile('spam.zip', 'w') as myzip: myzip.write('eggs.txt')
Примечание
metadata_encoding - это параметр для всего экземпляра Zip-файла. В настоящее время невозможно установить его для каждого пользователя.
Этот атрибут является обходным путем для устаревших реализаций, которые создают архивы с именами в текущей языковой кодировке или на кодовой странице (в основном в Windows). Согласно.В стандарте ZIP кодировка метаданных может быть указана как IBM code page (по умолчанию) или UTF-8 с помощью флага в заголовке архива. Этот флаг имеет приоритет над metadata_encoding, который является расширением, специфичным для Python.
Изменено в версии 3.2: Добавлена возможность использования
ZipFile
в качестве контекстного менеджера.Изменено в версии 3.4: Расширения ZIP64 включены по умолчанию.
Изменено в версии 3.5: Добавлена поддержка записи в невидимые потоки. Добавлена поддержка режима
'x'
.Изменено в версии 3.6: Ранее для нераспознанных значений сжатия использовалось простое значение
RuntimeError
.Изменено в версии 3.6.2: Параметр file принимает значение path-like object.
Изменено в версии 3.7: Добавьте параметр compresslevel.
Изменено в версии 3.8: Параметр strict_timestamps предназначен только для ключевых слов.
Изменено в версии 3.11: Добавлена поддержка указания кодировки имени пользователя для чтения метаданных в каталоге zip-файла и заголовках файлов.
- ZipFile.close()¶
Закройте архивный файл. Вы должны вызвать команду
close()
перед выходом из программы, иначе важные записи не будут записаны.
- ZipFile.getinfo(name)¶
Возвращает объект
ZipInfo
с информацией об элементе архива name. Вызовgetinfo()
для имени, которого в данный момент нет в архиве, вызоветKeyError
.
- ZipFile.infolist()¶
Возвращает список, содержащий
ZipInfo
объектов для каждого элемента архива. Объекты расположены в том же порядке, что и их записи в самом ZIP-файле на диске, если был открыт существующий архив.
- ZipFile.namelist()¶
Возвращает список участников архива по именам.
- ZipFile.open(name, mode='r', pwd=None, *, force_zip64=False)¶
Получите доступ к элементу архива как к объекту, подобному двоичному файлу. имя может быть либо именем файла в архиве, либо
ZipInfo
объекта. Параметр mode, если он включен, должен быть'r'
(по умолчанию) или'w'
. pwd - это пароль, используемый для расшифровки зашифрованных ZIP-файлов как объектаbytes
.open()
также является контекстным менеджером и, следовательно, поддерживает операторwith
:with ZipFile('spam.zip') as myzip: with myzip.open('eggs.txt') as myfile: print(myfile.read())
При использовании mode
'r'
файлоподобный объект (ZipExtFile
) доступен только для чтения и предоставляет следующие методы:read()
,readline()
,readlines()
,seek()
,tell()
,__iter__()
,__next__()
. Эти объекты могут работать независимо от ZIP-файла.При использовании
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()
для закрытого ZIP-файла вызоветValueError
. Ранее вызывалсяRuntimeError
.
- ZipFile.extract(member, path=None, pwd=None)¶
Извлеките элемент из архива в текущий рабочий каталог; элемент должен содержать его полное имя или объект
ZipInfo
. Информация о файле извлекается максимально точно. путь указывает другой каталог для извлечения. member может быть именем файла или объектомZipInfo
. pwd - это пароль, используемый для зашифрованных файлов в качестве объектаbytes
.Возвращает созданный нормализованный путь (к каталогу или новому файлу).
Примечание
Если имя файла-элемента является абсолютным путем, диск UNC sharepoint и начальные (обратные) косые черты будут удалены, например:
///foo/bar
становитсяfoo/bar
в Unix, аC:\foo\bar
становитсяfoo\bar
в Окна. И все".."
компоненты в имени файла-элемента будут удалены, например:../../foo../../ba..r
becomesfoo../ba..r
. On Windows illegal characters (:
,<
,>
,|
,"
,?
, and*
) replaced by underscore (``_`).Изменено в версии 3.6: Вызов
extract()
для закрытого ZIP-файла вызоветValueError
. Ранее вызывалсяRuntimeError
.Изменено в версии 3.6.2: Параметр path принимает значение path-like object.
- ZipFile.extractall(path=None, members=None, pwd=None)¶
Извлеките все элементы из архива в текущий рабочий каталог. path указывает другой каталог для извлечения. members является необязательным и должен быть подмножеством списка, возвращаемого
namelist()
. pwd - это пароль, используемый для зашифрованных файлов в качестве объектаbytes
.Предупреждение
Никогда не извлекайте архивы из ненадежных источников без предварительной проверки. Возможно, что файлы созданы за пределами path, например, элементы, абсолютные имена которых начинаются с
"/"
или имена файлов с двумя точками".."
. Этот модуль пытается предотвратить это. Смотрите примечаниеextract()
.Изменено в версии 3.6: Вызов
extractall()
для закрытого ZIP-файла вызоветValueError
. Ранее вызывалсяRuntimeError
.Изменено в версии 3.6.2: Параметр path принимает значение path-like object.
- ZipFile.printdir()¶
Распечатайте оглавление архива в формате
sys.stdout
.
- ZipFile.setpassword(pwd)¶
Установите pwd (объект
bytes
) в качестве пароля по умолчанию для извлечения зашифрованных файлов.
- ZipFile.read(name, pwd=None)¶
Возвращает байты файла name в архиве. name - это имя файла в архиве или объекта
ZipInfo
. Архив должен быть открыт для чтения или добавления. pwd - это пароль, используемый для зашифрованных файлов в качестве объектаbytes
и, если он указан, заменяет пароль по умолчанию, установленный с помощьюsetpassword()
. Вызовread()
для ZIP-файла, который использует метод сжатия, отличный отZIP_STORED
,ZIP_DEFLATED
,ZIP_BZIP2
илиZIP_LZMA
, приведет к появлениюNotImplementedError
. Также будет выдана ошибка, если соответствующий модуль сжатия недоступен.Изменено в версии 3.6: Вызов
read()
для закрытого ZIP-файла вызоветValueError
. Ранее вызывалсяRuntimeError
.
- ZipFile.testzip()¶
Прочитайте все файлы в архиве и проверьте их CRC и заголовки файлов. Верните имя первого поврежденного файла или верните
None
.Изменено в версии 3.6: Вызов
testzip()
для закрытого ZIP-файла вызоветValueError
. Ранее вызывалсяRuntimeError
.
- ZipFile.write(filename, arcname=None, compress_type=None, compresslevel=None)¶
Запишите файл с именем filename в архив, присвоив ему имя архива arcname (по умолчанию это будет то же самое, что и filename, но без буквы диска и с удаленными начальными разделителями путей). Если задано, compress_type переопределяет значение, заданное для параметра compression, в конструкторе для новой записи. Аналогично, compresslevel переопределяет конструктор, если задано. Архив должен быть открыт в режиме
'w'
,'x'
или'a'
.Примечание
Исторически сложилось так, что стандарт ZIP-файлов не определял кодировку метаданных, но настоятельно рекомендовал CP437 (исходную кодировку IBM PC) для обеспечения совместимости. В последних версиях допускается использование UTF-8 (только). В этом модуле UTF-8 будет автоматически использоваться для записи имен участников, если они содержат какие-либо символы, отличные от ASCII. Невозможно записать имена участников в какой-либо кодировке, отличной от ASCII или UTF-8.
Примечание
Имена архивов должны быть привязаны к корневому каталогу архива, то есть они не должны начинаться с разделителя путей.
Примечание
Если
arcname
(илиfilename
, еслиarcname
не задано) содержит нулевой байт, имя файла в архиве будет усечено до нулевого байта.Примечание
Косая черта в начале имени файла может привести к невозможности открытия архива в некоторых zip-программах в системах Windows.
Изменено в версии 3.6: Вызов
write()
для Zip-файла, созданного в режиме'r'
, или закрытого ZIP-файла вызовет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()
для Zip-файла, созданного в режиме'r'
, или закрытого ZIP-файла вызоветValueError
. Ранее вызывалсяRuntimeError
.
- ZipFile.mkdir(zinfo_or_directory, mode=511)¶
Создайте каталог внутри архива. Если zinfo_or_directory является строкой, то внутри архива создается каталог с режимом, указанным в аргументе mode. Однако, если zinfo_or_directory является экземпляром
ZipInfo
, то аргумент mode игнорируется.Архив должен быть открыт в режиме
'w'
,'x'
или'a'
.Добавлено в версии 3.11.
Также доступны следующие атрибуты данных:
- ZipFile.filename¶
Имя ZIP-файла.
- ZipFile.debug¶
Уровень используемого отладочного вывода. Его можно задать в диапазоне от
0
(значение по умолчанию, без вывода) до3
(максимальное количество выходных данных). Отладочная информация записывается вsys.stdout
.
Объекты пути¶
- class zipfile.Path(root, at='')¶
Создайте объект Path из
root
zip-файла (который может быть экземпляромZipFile
илиfile
, подходящим для передачи в конструкторZipFile
).at
указывает местоположение этого пути в zip-файле, например, „dirfile.txt“, „dir“ или «. По умолчанию используется пустая строка, указывающая на корень.
Объекты Path предоставляют следующие возможности объектов pathlib.Path
:
Объекты Path могут быть пройдены с помощью оператора /
или joinpath
.
- Path.name¶
Последний компонент пути.
- Path.open(mode='r', *, pwd, **)¶
Вызовите
ZipFile.open()
по текущему пути. Позволяет открывать файл для чтения или записи, текстовый или двоичный в поддерживаемых режимах: „r“, „w“, „rb“, „wbb“. Аргументы позиции и ключевого слова передаются вio.TextIOWrapper
при открытии в виде текста и игнорируются в противном случае.pwd
является параметромpwd
вZipFile.open()
.Изменено в версии 3.9: Добавлена поддержка текстового и двоичного режимов для open. Режим по умолчанию теперь текстовый.
Изменено в версии 3.11.2: Параметр
encoding
может быть указан в качестве позиционного аргумента, не вызываяTypeError
. Как это было возможно в версии 3.9. Код, который должен быть совместим с непатченными версиями 3.10 и 3.11, должен передавать все аргументыio.TextIOWrapper
, включаяencoding
, в качестве ключевых слов.
- Path.iterdir()¶
Перечислите дочерние элементы текущего каталога.
- Path.is_dir()¶
Возвращает
True
, если текущий контекст ссылается на каталог.
- Path.is_file()¶
Возвращает
True
, если текущий контекст ссылается на файл.
- Path.exists()¶
Возвращает
True
, если текущий контекст ссылается на файл или каталог в zip-файле.
- Path.suffix¶
Расширение файла конечного компонента.
Добавлено в версии 3.11: Добавлено свойство
Path.suffix
.
- Path.stem¶
Конечный компонент пути, без его суффикса.
Добавлено в версии 3.11: Добавлено свойство
Path.stem
.
- Path.suffixes¶
Список расширений файлов, к которым указан путь.
Добавлено в версии 3.11: Добавлено свойство
Path.suffixes
.
- Path.read_text(*, **)¶
Считайте текущий файл как текст в юникоде. Позиционные аргументы и ключевые слова передаются в
io.TextIOWrapper
(за исключениемbuffer
, что подразумевается контекстом).Изменено в версии 3.11.2: Параметр
encoding
может быть указан в качестве позиционного аргумента, не вызываяTypeError
. Как это было возможно в версии 3.9. Код, который должен быть совместим с непатченными версиями 3.10 и 3.11, должен передавать все аргументыio.TextIOWrapper
, включаяencoding
, в качестве ключевых слов.
- Path.read_bytes()¶
Считайте текущий файл в байтах.
- Path.joinpath(*other)¶
Возвращает новый объект Path, к которому присоединяются все остальные аргументы. Следующие эквивалентны:
>>> Path(...).joinpath('child').joinpath('grandchild') >>> Path(...).joinpath('child', 'grandchild') >>> Path(...) / 'child' / 'grandchild'
Изменено в версии 3.10: До версии 3.10
joinpath
был недокументирован и принимал только один параметр.
Проект zipp обеспечивает перенос последней функциональности объектов path на более старые версии Python. Используйте zipp.Path
вместо zipfile.Path
для раннего доступа к изменениям.
Объекты PyZipFile¶
Конструктор PyZipFile
принимает те же параметры, что и конструктор ZipFile
, и один дополнительный параметр optimize.
- class zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, optimize=-1)¶
Изменено в версии 3.2: Добавлен параметр оптимизировать.
Изменено в версии 3.4: Расширения ZIP64 включены по умолчанию.
Экземпляры имеют один метод в дополнение к методам объектов
ZipFile
:- writepy(pathname, basename='', filterfunc=None)¶
Найдите файлы
*.py
и добавьте соответствующий файл в архив.Если параметр optimize, равный
PyZipFile
, не был задан или-1
, то соответствующий файл является файлом*.pyc
, который при необходимости компилируется.Если для параметра optimize указано значение
PyZipFile
0
,1
или2
, в архив добавляются только файлы с таким уровнем оптимизации (см.compile()
), при необходимости выполняется компиляция.Если pathname - это файл, то имя файла должно заканчиваться на
.py
, и на верхнем уровне добавляется только файл (соответствующий*.pyc
) (без указания пути). Если путь к файлу не заканчивается на.py
, то будет поднятRuntimeError
. Если это каталог, а каталог не является каталогом пакета, то все файлы*.pyc
добавляются на верхнем уровне. Если каталог является каталогом пакета, то все*.pyc
добавляются под именем пакета в качестве пути к файлу, а если какие-либо подкаталоги являются каталогами пакетов, то все они добавляются рекурсивно в отсортированном порядке.базовое имя предназначено только для внутреннего использования.
filterfunc, если она задана, должна быть функцией, принимающей один строковый аргумент. Она будет передана для каждого пути (включая полный путь к каждому отдельному файлу), прежде чем будет добавлена в архив. Если filterfunc возвращает значение false, путь не будет добавлен, и если это каталог, то его содержимое будет проигнорировано. Например, если все наши тестовые файлы находятся либо в каталогах
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: Добавлен параметр filterfunc.
Изменено в версии 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: Добавлен параметр strict_timestamps, предназначенный только для ключевых слов.
Экземпляры имеют следующие методы и атрибуты:
- ZipInfo.is_dir()¶
Возвращает
True
, если этот элемент архива является каталогом.При этом используется имя записи: каталоги всегда должны заканчиваться на
/
.Добавлено в версии 3.6.
- ZipInfo.filename¶
Имя файла в архиве.
- ZipInfo.date_time¶
Время и дата последнего изменения элемента архива. Это набор из шести значений:
Индекс
Ценность
0
Год выпуска (>= 1980)
1
Месяц (на основе одного месяца)
2
День месяца (на основе одного числа)
3
Часы работы (с нуля)
4
Минуты (с отсчетом от нуля)
5
Секунды (с отсчетом от нуля)
Примечание
Формат ZIP-файла не поддерживает временные метки до 1980 года.
- ZipInfo.compress_type¶
Тип сжатия для элемента архива.
- ZipInfo.extra¶
Данные поля расширения. В PKZIP Application Note содержатся некоторые комментарии к внутренней структуре данных, содержащихся в этом
bytes
объекте.
- ZipInfo.create_system¶
Система, создавшая ZIP-архив.
- ZipInfo.create_version¶
Версия PKZIP, в которой был создан ZIP-архив.
- ZipInfo.extract_version¶
Для распаковки архива необходима версия PKZIP.
- ZipInfo.reserved¶
Должно быть, равно нулю.
- ZipInfo.flag_bits¶
Фрагменты почтового флага.
- 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
Параметры командной строки¶
Ловушки декомпрессии¶
Извлечение в модуле zipfile может завершиться неудачей из-за некоторых ошибок, перечисленных ниже.
Из самого файла¶
Распаковка может завершиться неудачей из-за неправильного пароля, контрольной суммы CRC, формата ZIP или неподдерживаемого метода сжатия для расшифровки.
Ограничения файловой системы¶
Превышение ограничений для разных файловых систем может привести к сбою распаковки. Например, допустимые символы в записях каталога, длина имени файла, длина пути к файлу, размер одного файла и количество файлов и т.д.
Ограниченность ресурсов¶
Недостаток памяти или объема диска может привести к сбою распаковки. Например, к библиотеке zip-файлов применяются «декомпрессионные бомбы» (они же ZIP bomb), которые могут привести к исчерпанию объема диска.
Прерывание¶
Прерывание процесса распаковки, например нажатие кнопки control-C или остановка процесса распаковки, может привести к неполной распаковке архива.
Поведение извлечения по умолчанию¶
Незнание правил извлечения по умолчанию может привести к неожиданным результатам распаковки. Например, при повторном извлечении одного и того же архива файлы будут перезаписаны без запроса.