zipfile
--- Work with ZIP archives¶
Source code: Lib/zipfile/
Формат файлу ZIP є загальним стандартом архівування та стиснення. Цей модуль надає інструменти для створення, читання, запису, додавання та списку ZIP-файлів. Будь-яке розширене використання цього модуля вимагатиме розуміння формату, як визначено в Примітці до програми PKZIP.
Цей модуль наразі не обробляє багатодискові файли ZIP. Він може обробляти ZIP-файли, які використовують розширення ZIP64 (тобто ZIP-файли розміром понад 4 ГБ). Він підтримує розшифровку зашифрованих файлів у ZIP-архівах, але наразі не може створити зашифрований файл. Дешифрування надзвичайно повільне, оскільки воно реалізовано на рідному Python, а не на C.
Moduł definiuje następujące pozycje:
- exception zipfile.BadZipFile¶
Помилка виникає через погані файли ZIP.
Added in version 3.2.
- exception zipfile.BadZipfile¶
Псевдонім
BadZipFile
для сумісності зі старішими версіями Python.Ditinggalkan sejak versi 3.2.
- exception zipfile.LargeZipFile¶
Помилка виникає, коли ZIP-файл вимагає функції ZIP64, але її не ввімкнено.
- class zipfile.ZipFile
Клас для читання та запису ZIP-файлів. Перегляньте розділ Objek ZipFile для деталей конструктора.
- class zipfile.Path
Class that implements a subset of the interface provided by
pathlib.Path
, including the fullimportlib.resources.abc.Traversable
interface.Added in version 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 має бути кортежем, що містить шість полів, які описують час останньої зміни файлу; поля описані в розділі Objek ZipInfo.Berubah pada versi 3.13: A public
compress_level
attribute has been added to expose the formerly protected_compresslevel
. The older protected name continues to work as a property for backwards compatibility.- _for_archive(archive)¶
Resolve the date_time, compression attributes, and external attributes to suitable defaults as used by
ZipFile.writestr()
.Returns self for chaining.
Added in version 3.14.
- zipfile.is_zipfile(filename)¶
Повертає
True
, якщо filename є дійсним ZIP-файлом на основі його магічного числа, інакше повертаєFalse
. ім’я файлу також може бути файлом або файлоподібним об’єктом.Berubah pada versi 3.1: Підтримка файлів і файлоподібних об'єктів.
- zipfile.ZIP_STORED¶
Числова константа для нестисненого члена архіву.
- zipfile.ZIP_DEFLATED¶
Числова константа для звичайного методу стиснення ZIP. Для цього потрібен модуль
zlib
.
- zipfile.ZIP_BZIP2¶
Числова константа для методу стиснення BZIP2. Для цього потрібен модуль
bz2
.Added in version 3.3.
- zipfile.ZIP_LZMA¶
Числова константа для методу стиснення LZMA. Для цього потрібен модуль
lzma
.Added in version 3.3.
- zipfile.ZIP_ZSTANDARD¶
The numeric constant for Zstandard compression. This requires the
compression.zstd
module.Catatan
In APPNOTE 6.3.7, the method ID
20
was assigned to Zstandard compression. This was changed in APPNOTE 6.3.8 to method ID93
to avoid conflicts, with method ID20
being deprecated. For compatibility, thezipfile
module reads both method IDs but will only write data with method ID93
.Added in version 3.14.
Catatan
The ZIP file format specification has included support for bzip2 compression since 2001, for LZMA compression since 2006, and Zstandard compression since 2020. However, some tools (including older Python releases) do not support these compression methods, and may either refuse to process the ZIP file altogether, or fail to extract individual files.
Lihat juga
- Примітка до програми PKZIP
Документація щодо формату файлу ZIP від Філа Каца, творця формату та використаних алгоритмів.
- Info-ZIP Home Page
Інформація про програми ZIP-архівів та бібліотеки розробки проекту Info-ZIP.
Objek 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-файл, то до нього додаються додаткові файли. Якщо файл не відноситься до файлу ZIP, тоді до файлу додається новий архів ZIP. Це призначено для додавання архіву ZIP до іншого файлу (наприклад,python.exe
). Якщо mode має значення'a'
і файл взагалі не існує, він буде створений. Якщо mode має значення'r'
або'a'
, файл має бути доступним для пошуку.compression is the ZIP compression method to use when writing the archive, and should be
ZIP_STORED
,ZIP_DEFLATED
,ZIP_BZIP2
,ZIP_LZMA
, orZIP_ZSTANDARD
; unrecognized values will causeNotImplementedError
to be raised. IfZIP_DEFLATED
,ZIP_BZIP2
,ZIP_LZMA
, orZIP_ZSTANDARD
is specified but the corresponding module (zlib
,bz2
,lzma
, orcompression.zstd
) is not available,RuntimeError
is raised. The default isZIP_STORED
.Якщо allowZip64 має значення
True
(за замовчуванням), zipfile створюватиме ZIP-файли з розширеннями ZIP64, якщо розмір zip-файлу перевищує 4 ГБ. Якщо значенняfalse
,zipfile
викличе виняток, коли файл ZIP вимагатиме розширення ZIP64.The compresslevel parameter controls the compression level to use when writing files to the archive. When using
ZIP_STORED
orZIP_LZMA
it has no effect. When usingZIP_DEFLATED
integers0
through9
are accepted (seezlib
for more information). When usingZIP_BZIP2
integers1
through9
are accepted (seebz2
for more information). When usingZIP_ZSTANDARD
integers-131072
through22
are commonly accepted (seeCompressionParameter.compression_level
for more on retrieving valid values and their meaning).Аргумент strict_timestamps, коли встановлено значення
False
, дозволяє заархівувати файли, старіші за 1980-01-01, ціною встановлення позначки часу на 1980-01-01. Подібна поведінка відбувається з файлами, новішими за 2107-12-31, мітка часу також встановлена на обмеження.When mode is
'r'
, metadata_encoding may be set to the name of a codec, which will be used to decode metadata such as the names of members and ZIP comments.Якщо файл створено в режимі
'w'
,'x'
або'a'
, а потімзакрив
без додавання файлів до архіву, відповідний ZIP структури для порожнього архіву будуть записані у файл.ZipFile також є контекстним менеджером і тому підтримує оператор
with
. У цьому прикладі myzip закривається після завершення набору операторівwith
--- навіть якщо виникає виняток:with ZipFile('spam.zip', 'w') as myzip: myzip.write('eggs.txt')
Catatan
metadata_encoding is an instance-wide setting for the ZipFile. It is not currently possible to set this on a per-member basis.
This attribute is a workaround for legacy implementations which produce archives with names in the current locale encoding or code page (mostly on Windows). According to the .ZIP standard, the encoding of metadata may be specified to be either IBM code page (default) or UTF-8 by a flag in the archive header. That flag takes precedence over metadata_encoding, which is a Python-specific extension.
Berubah pada versi 3.2: Додано можливість використовувати
ZipFile
як контекстний менеджер.Berubah pada versi 3.4: Розширення ZIP64 увімкнено за замовчуванням.
Berubah pada versi 3.5: Додано підтримку запису в потоки, які неможливо шукати. Додано підтримку режиму
'x''
.Berubah pada versi 3.6: Раніше звичайна помилка
RuntimeError
виникала для нерозпізнаних значень стиснення.Berubah pada versi 3.6.2: Параметр file приймає path-like object.
Berubah pada versi 3.7: Додайте параметр compresslevel.
Berubah pada versi 3.8: The strict_timestamps keyword-only parameter.
Berubah pada versi 3.11: Added support for specifying member name encoding for reading metadata in the zipfile's directory and file headers.
- 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 abytes
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
.In both cases the file-like object has also attributes
name
, which is equivalent to the name of a file within the archive, andmode
, which is'rb'
or'wb'
depending on the input mode.Під час запису файлу, якщо розмір файлу невідомий заздалегідь, але може перевищувати 2 ГіБ, передайте
force_zip64=True
, щоб переконатися, що формат заголовка підтримує великі файли. Якщо розмір файлу відомий заздалегідь, створіть об’єктZipInfo
з наборомfile_size
і використовуйте це як параметр name.Catatan
Методи
open()
,read()
іextract()
можуть приймати назву файлу або об’єктZipInfo
. Ви оціните це, коли спробуєте прочитати ZIP-файл, який містить учасників із повторюваними іменами.Berubah pada versi 3.6: Вилучено підтримку
mode='U'
. Використовуйтеio.TextIOWrapper
для читання стиснених текстових файлів у режимі universal newlines.Berubah pada versi 3.6:
ZipFile.open()
тепер можна використовувати для запису файлів в архів за допомогою параметраmode='w'
.Berubah pada versi 3.6: Виклик
open()
для закритого ZipFile викличеValueError
. Раніше виникала помилкаRuntimeError
.Berubah pada versi 3.13: Added attributes
name
andmode
for the writeable file-like object. The value of themode
attribute for the readable file-like object was changed from'r'
to'rb'
.
- 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 aZipInfo
object. pwd is the password used for encrypted files as abytes
object.Повертає створений нормалізований шлях (каталог або новий файл).
Catatan
Якщо ім’я файлу-члена є абсолютним шляхом, точку спільного використання диска/UNC і початкові (зворотні) скісні риски буде видалено, наприклад:
///foo/bar
станеfoo/bar
в Unix, аC:\foo\bar
стаєfoo\bar
у Windows. І всі компоненти".."
в імені файлу-члена буде видалено, наприклад:../../foo../../ba..r
станеfoo../ba ..r
. У Windows неприпустимі символи (:
,<
,>
,|
,"
,?
і*
) замінено підкресленням (_
).Berubah pada versi 3.6: Виклик
extract()
для закритого ZipFile викличеValueError
. Раніше виникала помилкаRuntimeError
.Berubah pada versi 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 abytes
object.Peringatan
Ніколи не витягуйте архіви з ненадійних джерел без попередньої перевірки. Цілком можливо, що файли створюються поза шляхом, напр. члени, які мають абсолютні імена файлів, що починаються з
"/"
або імена файлів з двома крапками".."
. Цей модуль намагається запобігти цьому. Дивіться приміткуextract()
.Berubah pada versi 3.6: Виклик
extractall()
для закритого ZipFile викличеValueError
. Раніше виникала помилкаRuntimeError
.Berubah pada versi 3.6.2: Параметр path приймає path-like object.
- ZipFile.printdir()¶
Роздрукуйте зміст архіву в
sys.stdout
.
- 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 abytes
object and, if specified, overrides the default password set withsetpassword()
. Callingread()
on a ZipFile that uses a compression method other thanZIP_STORED
,ZIP_DEFLATED
,ZIP_BZIP2
,ZIP_LZMA
, orZIP_ZSTANDARD
will raise aNotImplementedError
. An error will also be raised if the corresponding compression module is not available.Berubah pada versi 3.6: Виклик
read()
для закритого ZipFile викличеValueError
. Раніше виникала помилкаRuntimeError
.
- ZipFile.testzip()¶
Прочитайте всі файли в архіві та перевірте їх CRC і заголовки файлів. Повертає назву першого несправного файлу або повертає
None
.Berubah pada versi 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'
.Catatan
The ZIP file standard historically did not specify a metadata encoding, but strongly recommended CP437 (the original IBM PC encoding) for interoperability. Recent versions allow use of UTF-8 (only). In this module, UTF-8 will automatically be used to write the member names if they contain any non-ASCII characters. It is not possible to write member names in any encoding other than ASCII or UTF-8.
Catatan
Імена архівів мають бути відносними до кореня архіву, тобто вони не повинні починатися з роздільника шляху.
Catatan
Якщо
arcname
(абоfilename
, якщоarcname
не вказано) містить нульовий байт, ім’я файлу в архіві буде скорочено на нульовий байт.Catatan
Слеш на початку назви файлу може призвести до того, що архів буде неможливо відкрити в деяких програмах zip у системах Windows.
Berubah pada versi 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 замінить конструктор, якщо він заданий.Catatan
Під час передачі екземпляра
ZipInfo
як параметра zinfo_or_arcname буде використовуватися метод стиснення, указаний у члені compress_type даного екземпляраZipInfo
. За замовчуванням конструкторZipInfo
встановлює для цього елементаZIP_STORED
.Berubah pada versi 3.2: Аргумент compress_type.
Berubah pada versi 3.6: Виклик
writestr()
для ZipFile, створеного в режимі'r'
, або закритого ZipFile призведе доValueError
. Раніше виникала помилкаRuntimeError
.
- ZipFile.mkdir(zinfo_or_directory, mode=511)¶
Create a directory inside the archive. If zinfo_or_directory is a string, a directory is created inside the archive with the mode that is specified in the mode argument. If, however, zinfo_or_directory is a
ZipInfo
instance then the mode argument is ignored.The archive must be opened with mode
'w'
,'x'
or'a'
.Added in version 3.11.
Також доступні такі атрибути даних:
- ZipFile.filename¶
Назва ZIP-файлу.
- ZipFile.debug¶
Рівень вихідних даних налагодження для використання. Це значення можна встановити від
0
(за замовчуванням, без виводу) до3
(найбільший вивід). Інформація про налагодження записується вsys.stdout
.
Objek Jalur, Path¶
- class zipfile.Path(root, at='')¶
Створіть об’єкт Path із
кореневого
zip-файлу (який може бути екземпляромZipFile
абоfile
, придатним для передачі в конструкторZipFile
).at
визначає розташування цього Шляху в zip-файлі, напр. 'dir/file.txt', 'dir/' або ''. За замовчуванням порожній рядок із зазначенням кореня.Catatan
The
Path
class does not sanitize filenames within the ZIP archive. Unlike theZipFile.extract()
andZipFile.extractall()
methods, it is the caller's responsibility to validate or sanitize filenames to prevent path traversal vulnerabilities (e.g., filenames containing ".." or absolute paths). When handling untrusted archives, consider resolving filenames usingos.path.abspath()
and checking against the target directory withos.path.commonpath()
.
Об’єкти Path надають такі особливості об’єктів pathlib.Path
:
Path objects are traversable using the /
operator or joinpath
.
- Path.name¶
Остаточний компонент шляху.
- Path.open(mode='r', *, pwd, **)¶
Викликати
ZipFile.open()
на поточному шляху. Дозволяє відкривати для читання чи запису, текстового чи двійкового файлу за допомогою підтримуваних режимів: "r", "w", "rb", "wb". Позиційні та ключові аргументи передаються доio.TextIOWrapper
, коли відкриваються як текст, і ігноруються в інших випадках.pwd
— це параметрpwd
дляZipFile.open()
.Berubah pada versi 3.9: Додано підтримку текстового та бінарного режимів для відкритого. Типовим режимом тепер є текст.
Berubah pada versi 3.11.2: The
encoding
parameter can be supplied as a positional argument without causing aTypeError
. As it could in 3.9. Code needing to be compatible with unpatched 3.10 and 3.11 versions must pass allio.TextIOWrapper
arguments,encoding
included, as keywords.
- Path.iterdir()¶
Перелічіть дочірні елементи поточного каталогу.
- Path.is_dir()¶
Повертає
True
, якщо поточний контекст посилається на каталог.
- Path.is_file()¶
Повертає
True
, якщо поточний контекст посилається на файл.
- Path.is_symlink()¶
Return
True
if the current context references a symbolic link.Added in version 3.12.
Berubah pada versi 3.13: Previously,
is_symlink
would unconditionally returnFalse
.
- Path.exists()¶
Повертає
True
, якщо поточний контекст посилається на файл або каталог у файлі zip.
- Path.suffix¶
The last dot-separated portion of the final component, if any. This is commonly called the file extension.
Added in version 3.11: Added
Path.suffix
property.
- Path.stem¶
The final path component, without its suffix.
Added in version 3.11: Added
Path.stem
property.
- Path.suffixes¶
A list of the path’s suffixes, commonly called file extensions.
Added in version 3.11: Added
Path.suffixes
property.
- Path.read_text(*, **)¶
Читати поточний файл як текст Юнікод. Позиційні та ключові аргументи передаються до
io.TextIOWrapper
(за виняткомbuffer
, який передбачається контекстом).Berubah pada versi 3.11.2: The
encoding
parameter can be supplied as a positional argument without causing aTypeError
. As it could in 3.9. Code needing to be compatible with unpatched 3.10 and 3.11 versions must pass allio.TextIOWrapper
arguments,encoding
included, as keywords.
- Path.read_bytes()¶
Читати поточний файл як байти.
- Path.joinpath(*other)¶
Return a new Path object with each of the other arguments joined. The following are equivalent:
>>> Path(...).joinpath('child').joinpath('grandchild') >>> Path(...).joinpath('child', 'grandchild') >>> Path(...) / 'child' / 'grandchild'
Berubah pada versi 3.10: Prior to 3.10,
joinpath
was undocumented and accepted exactly one parameter.
The zipp project provides backports
of the latest path object functionality to older Pythons. Use
zipp.Path
in place of zipfile.Path
for early access to
changes.
Objek PyZipFile¶
Конструктор PyZipFile
приймає ті самі параметри, що й конструктор ZipFile
, і один додатковий параметр, optimize.
- class zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, optimize=-1)¶
Berubah pada versi 3.2: Added the optimize parameter.
Berubah pada versi 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
Berubah pada versi 3.4: Added the filterfunc parameter.
Berubah pada versi 3.6.2: Параметр pathname приймає path-like object.
Berubah pada versi 3.7: Рекурсія сортує записи каталогу.
Objek 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, мітка часу також встановлена на обмеження.Added in version 3.6.
Berubah pada versi 3.6.2: Параметр filename приймає path-like object.
Berubah pada versi 3.8: Added the strict_timestamps keyword-only parameter.
Екземпляри мають такі методи та атрибути:
- ZipInfo.is_dir()¶
Повертає
True
, якщо цей елемент архіву є каталогом.Тут використовується назва запису: каталоги завжди мають закінчуватися на
/
.Added in version 3.6.
- ZipInfo.filename¶
Назва файлу в архіві.
- ZipInfo.date_time¶
Час і дата останньої зміни учасника архіву. Це кортеж із шести значень:
Indeks
Nilai
0
Tahun (>= 1980)
1
Bulan (basis 1)
2
Tanggal dari bulan (basis 1)
3
Jam (basis 0)
4
Menit (basis 0)
5
Detik (basis 0)
Catatan
Формат файлу ZIP не підтримує мітки часу до 1980 року.
- ZipInfo.compress_type¶
Тип стиснення для елемента архіву.
- ZipInfo.extra¶
Дані поля розширення. Примітка до програми PKZIP містить деякі коментарі щодо внутрішньої структури даних, що містяться в цьому об'єкті
bytes
.
- ZipInfo.create_system¶
Система, яка створила ZIP-архів.
- ZipInfo.create_version¶
Версія PKZIP, яка створила архів ZIP.
- ZipInfo.extract_version¶
Для розпакування архіву потрібна версія PKZIP.
- ZipInfo.reserved¶
Harus nol.
- 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
Параметри командного рядка¶
- -c <zipfile> <source1> ... <sourceN>¶
- --create <zipfile> <source1> ... <sourceN>¶
Створіть zip-файл із вихідних файлів.
Підводні камені декомпресії¶
Видобуток у модулі zipfile може завершитися помилкою через деякі помилки, перелічені нижче.
З самого файлу¶
Декомпресія може не вдатися через неправильний пароль/контрольну суму CRC/формат ZIP або непідтримуваний метод стиснення/дешифрування.
Обмеження файлової системи¶
Перевищення обмежень на різні файлові системи може призвести до збою декомпресії. Наприклад, допустимі символи в записах каталогу, довжина імені файлу, довжина шляху, розмір окремого файлу та кількість файлів тощо.
Обмеження ресурсів¶
Відсутність пам'яті або об'єму диска може призвести до збою декомпресії. Наприклад, бомби декомпресії (також ZIP-бомба) застосовуються до бібліотеки zip-файлів, що може спричинити виснаження обсягу диска.
Interupsi¶
Переривання під час декомпресії, наприклад натискання клавіш Control-C або припинення процесу декомпресії, може призвести до неповного розпакування архіву.
Типова поведінка вилучення¶
Незнання поведінки вилучення за замовчуванням може призвести до неочікуваних результатів декомпресії. Наприклад, якщо двічі розпаковувати той самий архів, він перезаписує файли без запиту.