zipfile
--- 使用ZIP存檔?
源代碼: Lib/zipfile.py
ZIP 文件格式是一個常用的歸檔與壓縮標(biāo)準(zhǔn)。 這個模塊提供了創(chuàng)建、讀取、寫入、添加及列出 ZIP 文件的工具。 任何對此模塊的進(jìn)階使用都將需要理解此格式,其定義參見 PKZIP 應(yīng)用程序筆記。
此模塊目前不能處理分卷 ZIP 文件。它可以處理使用 ZIP64 擴(kuò)展(超過 4 GB 的 ZIP 文件)的 ZIP 文件。它支持解密 ZIP 歸檔中的加密文件,但是目前不能創(chuàng)建一個加密的文件。解密非常慢,因為它是使用原生 Python 而不是 C 實現(xiàn)的。
這個模塊定義了以下內(nèi)容:
- exception zipfile.BadZipFile?
為損壞的 ZIP 文件拋出的錯誤。
3.2 新版功能.
- exception zipfile.BadZipfile?
BadZipFile
的別名,與舊版本 Python 保持兼容性。3.2 版后已移除.
- exception zipfile.LargeZipFile?
當(dāng) ZIP 文件需要 ZIP64 功能但是未啟用時會拋出此錯誤。
- class zipfile.ZipFile
用于讀寫 ZIP 文件的類。 欲了解構(gòu)造函數(shù)的描述,參閱段落 ZipFile 對象。
- class zipfile.Path
用于 zip 文件的兼容 pathlib 的包裝器。 詳情參見 Path 對象。
3.8 新版功能.
- class zipfile.PyZipFile
用于創(chuàng)建包含 Python 庫的 ZIP 歸檔的類。
- class zipfile.ZipInfo(filename='NoName', date_time=(1980, 1, 1, 0, 0, 0))?
用于表示檔案內(nèi)一個成員信息的類。 此類的實例會由
ZipFile
對象的getinfo()
和infolist()
方法返回。 大多數(shù)zipfile
模塊的用戶都不必創(chuàng)建它們,只需使用此模塊所創(chuàng)建的實例。 filename 應(yīng)當(dāng)是檔案成員的全名,date_time 應(yīng)當(dāng)是包含六個字段的描述最近修改時間的元組;這些字段的描述請參閱 ZipInfo 對象。
- zipfile.is_zipfile(filename)?
根據(jù)文件的 Magic Number,如果 filename 是一個有效的 ZIP 文件則返回
True
,否則返回False
。 filename 也可能是一個文件或類文件對象。在 3.1 版更改: 支持文件或類文件對象。
- zipfile.ZIP_STORED?
未被壓縮的歸檔成員的數(shù)字常數(shù)。
- zipfile.ZIP_LZMA?
LZMA 壓縮方法的數(shù)字常數(shù)。需要
lzma
模塊。3.3 新版功能.
備注
ZIP 文件格式規(guī)范包括自 2001 年以來對 bzip2 壓縮的支持,以及自 2006 年以來對 LZMA 壓縮的支持。但是,一些工具(包括較舊的 Python 版本)不支持這些壓縮方法,并且可能拒絕完全處理 ZIP 文件,或者無法提取單個文件。
參見
- PKZIP 應(yīng)用程序筆記
Phil Katz 編寫的 ZIP 文件格式文檔,此格式和使用的算法的創(chuàng)建者。
- Info-ZIP 主頁
有關(guān) Info-ZIP 項目的 ZIP 存檔程序和開發(fā)庫的信息。
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 應(yīng)當(dāng)為
'r'
來讀取一個存在的文件,'w'
來截斷并寫入新的文件,'a'
來添加到一個存在的文件,或者'x'
來僅新建并寫入新的文件。如果 mode 為'x'
并且 file 指向已經(jīng)存在的文件,則拋出FileExistsError
。如果 mode 為'a'
且 file 為已存在的文件,則格外的文件將被加入。如果 file 不指向 ZIP 文件,之后一個新的 ZIP 歸檔將被追加為此文件。這是為了將 ZIP 歸檔添加到另一個文件(例如python.exe
)。如果 mode 為'a'
并且文件不存在, 則會新建。如果 mode 為'r'
或'a'
, 則文件應(yīng)當(dāng)可定位。compression 是在寫入歸檔時要使用的 ZIP 壓縮方法,應(yīng)為
ZIP_STORED
,ZIP_DEFLATED
,ZIP_BZIP2
或ZIP_LZMA
;不可識別的值將導(dǎo)致引發(fā)NotImplementedError
。 如果指定了ZIP_DEFLATED
,ZIP_BZIP2
或ZIP_LZMA
但相應(yīng)的模塊 (zlib
,bz2
或lzma
) 不可用,則會引發(fā)RuntimeError
。 默認(rèn)值為ZIP_STORED
。如果 allowZip64 為
True
(默認(rèn)值) 則當(dāng) zipfile 大于 4 GiB 時 zipfile 將創(chuàng)建使用 ZIP64 擴(kuò)展的 ZIP 文件。 如果該參數(shù)為false
則當(dāng) ZIP 文件需要 ZIP64 擴(kuò)展時zipfile
將引發(fā)異常。compresslevel 形參控制在將文件寫入歸檔時要使用的壓縮等級。 當(dāng)使用
ZIP_STORED
或ZIP_LZMA
時無壓縮效果。 當(dāng)使用ZIP_DEFLATED
時接受整數(shù)0
至9
(更多信息參見zlib
)。 當(dāng)使用ZIP_BZIP2
時接受整數(shù)1
至9
(更多信息參見bz2
)。strict_timestamps 參數(shù)在設(shè)為
False
時允許壓縮早于 1980-01-01 的文件,代價時會將時間戳設(shè)為 1980-01-01。 類似的行為也會對晚于 2107-12-31 的文件發(fā)生,時間戳也會被設(shè)為該上限值。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.如果創(chuàng)建文件時使用
'w'
,'x'
或'a'
模式并且未向歸檔添加任何文件就執(zhí)行了closed
,則會將適當(dāng)?shù)目諝w檔 ZIP 結(jié)構(gòu)寫入文件。ZipFile 也是一個上下文管理器,因此支持
with
語句。 在這個示例中,myzip 將在with
語句塊執(zhí)行完成之后被關(guān)閉 --- 即使是發(fā)生了異常:with ZipFile('spam.zip', 'w') as myzip: myzip.write('eggs.txt')
備注
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.
3.2 新版功能: 添加了將
ZipFile
用作上下文管理器的功能。在 3.4 版更改: 默認(rèn)啟用 ZIP64 擴(kuò)展。
在 3.5 版更改: 添加了對不可查找數(shù)據(jù)流的支持。 并添加了對
'x'
模式的支持。在 3.6 版更改: 在此之前,對于不可識別的壓縮值將引發(fā)普通的
RuntimeError
。在 3.6.2 版更改: file 形參接受一個 path-like object。
在 3.7 版更改: 添加了 compresslevel 形參。
3.8 新版功能: strict_timestamps 僅限關(guān)鍵字參數(shù)
在 3.11 版更改: Added support for specifying member name encoding for reading metadata in the zipfile's directory and file headers.
- ZipFile.getinfo(name)?
返回一個
ZipInfo
對象,其中包含有關(guān)歸檔成員 name 的信息。 針對一個目前并不包含于歸檔中的名稱調(diào)用getinfo()
將會引發(fā)KeyError
。
- ZipFile.infolist()?
返回一個列表,其中包含每個歸檔成員的
ZipInfo
對象。 如果是打開一個現(xiàn)有歸檔則這些對象的排列順序與它們對應(yīng)條目在磁盤上的實際 ZIP 文件中的順序一致。
- ZipFile.namelist()?
返回按名稱排序的歸檔成員列表。
- ZipFile.open(name, mode='r', pwd=None, *, force_zip64=False)?
以二進(jìn)制文件類對象的形式訪問一個歸檔成員。 name 可以是歸檔內(nèi)某個文件的名稱也可以是某個
ZipInfo
對象。 如果包含了 mode 形參,則它必須為'r'
(默認(rèn)值) 或'w'
。 pwd 為用于解密已加密 ZIP 文件的密碼。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__()
。 這些對象可獨立于 ZipFile 進(jìn)行操作。如果
mode='w'
則返回一個可寫入的文件句柄,它將支持write()
方法。 當(dāng)一個可寫入的文件句柄被打開時,嘗試讀寫 ZIP 文件中的其他文件將會引發(fā)ValueError
。當(dāng)寫入一個文件時,如果文件大小不能預(yù)先確定但是可能超過 2 GiB,可傳入
force_zip64=True
以確保標(biāo)頭格式能夠支持超大文件。 如果文件大小可以預(yù)先確定,則在構(gòu)造ZipInfo
對象時應(yīng)設(shè)置file_size
,并將其用作 name 形參。備注
open()
,read()
和extract()
方法可接受文件名或ZipInfo
對象。 當(dāng)嘗試讀取一個包含重復(fù)名稱成員的 ZIP 文件時你將發(fā)現(xiàn)此功能很有好處。在 3.6 版更改: 移除了對
mode='U'
的支持。 請使用io.TextIOWrapper
以在 universal newlines 模式中讀取已壓縮的文本文件。在 3.6 版更改:
ZipFile.open()
can now be used to write files into the archive with themode='w'
option.在 3.6 版更改: 在已關(guān)閉的 ZipFile 上調(diào)用
open()
將引發(fā)ValueError
。 在之前的版本中則會引發(fā)RuntimeError
。
- ZipFile.extract(member, path=None, pwd=None)?
從歸檔中提取出一個成員放入當(dāng)前工作目錄;member 必須為成員的完整名稱或
ZipInfo
對象。 成員的文件信息會盡可能精確地被提取。 path 指定一個要提取到的不同目錄。 member 可以是一個文件名或ZipInfo
對象。 pwd 是用于解密文件的密碼。返回所創(chuàng)建的經(jīng)正規(guī)化的路徑(對應(yīng)于目錄或新文件)。
備注
如果一個成員文件名為絕對路徑,則將去掉驅(qū)動器/UNC共享點和前導(dǎo)的(反)斜杠,例如:
///foo/bar
在 Unix 上將變?yōu)?foo/bar
,而C:\foo\bar
在 Windows 上將變?yōu)?foo\bar
。 并且一個成員文件名中的所有".."
都將被移除,例如:../../foo../../ba..r
將變?yōu)?foo../ba..r
。 在 Windows 上非法字符 (:
,<
,>
,|
,"
,?
, and*
) 會被替換為下劃線 (_
)。在 3.6 版更改: 在已關(guān)閉的 ZipFile 上調(diào)用
extract()
將引發(fā)ValueError
。 在之前的版本中則將引發(fā)RuntimeError
。在 3.6.2 版更改: path 形參接受一個 path-like object。
- ZipFile.extractall(path=None, members=None, pwd=None)?
從歸檔中提取出所有成員放入當(dāng)前工作目錄。 path 指定一個要提取到的不同目錄。 members 為可選項且必須為
namelist()
所返回列表的一個子集。 pwd 是用于解密文件的密碼。警告
絕不要未經(jīng)預(yù)先檢驗就從不可靠的源中提取歸檔文件。 這樣有可能在 path 之外創(chuàng)建文件,例如某些成員具有以
"/"
開始的文件名或帶有兩個點號".."
的文件名。 此模塊會嘗試防止這種情況。 參見extract()
的注釋。在 3.6 版更改: 在已關(guān)閉的 ZipFile 上調(diào)用
extractall()
將引發(fā)ValueError
。 在之前的版本中則將引發(fā)RuntimeError
。在 3.6.2 版更改: path 形參接受一個 path-like object。
- ZipFile.printdir()?
將歸檔的目錄表打印到
sys.stdout
。
- ZipFile.setpassword(pwd)?
設(shè)置 pwd 為用于提取已加密文件的默認(rèn)密碼。
- ZipFile.read(name, pwd=None)?
返回歸檔中文件 name 的字節(jié)數(shù)據(jù)。 name 是歸檔中文件的名稱,或是一個
ZipInfo
對象。 歸檔必須以讀取或追加方式打開。 pwd 為用于已加密文件的密碼,并且如果指定該參數(shù)則它將覆蓋通過setpassword()
設(shè)置的默認(rèn)密碼。 on a ZipFile that uses a compression method 在使用ZIP_STORED
,ZIP_DEFLATED
,ZIP_BZIP2
或ZIP_LZMA
以外的壓縮方法的 ZipFile 上調(diào)用read()
將引發(fā)NotImplementedError
。 如果相應(yīng)的壓縮模塊不可用也會引發(fā)錯誤。在 3.6 版更改: 在已關(guān)閉的 ZipFile 上調(diào)用
read()
將引發(fā)ValueError
。 在之前的版本中則會引發(fā)RuntimeError
。
- ZipFile.testzip()?
讀取歸檔中的所有文件并檢查它們的 CRC 和文件頭。 返回第一個已損壞文件的名稱,在其他情況下則返回
None
。在 3.6 版更改: 在已關(guān)閉的 ZipFile 上調(diào)用
testzip()
將引發(fā)ValueError
。 在之前的版本中則將引發(fā)RuntimeError
。
- ZipFile.write(filename, arcname=None, compress_type=None, compresslevel=None)?
將名為 filename 的文件寫入歸檔,給予的歸檔名為 arcname (默認(rèn)情況下將與 filename 一致,但是不帶驅(qū)動器盤符并會移除開頭的路徑分隔符)。 compress_type 如果給出,它將覆蓋作為構(gòu)造器 compression 形參對于新條目所給出的值。 類似地,compresslevel 如果給出也將覆蓋構(gòu)造器。 歸檔必須使用
'w'
,'x'
或'a'
模式打開。備注
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.
備注
歸檔名稱應(yīng)當(dāng)是基于歸檔根目錄的相對路徑,也就是說,它們不應(yīng)以路徑分隔符開頭。
備注
如果
arcname
(或filename
,如果arcname
未給出) 包含一個空字節(jié),則歸檔中該文件的名稱將在空字節(jié)位置被截斷。備注
文件名開頭有一個斜杠可能導(dǎo)致存檔文件無法在 Windows 系統(tǒng)上的某些 zip 程序中打開。
在 3.6 版更改: 在使用
'r'
模式創(chuàng)建的 ZipFile 或已關(guān)閉的 ZipFile 上調(diào)用write()
將引發(fā)ValueError
。 在之前的版本中則會引發(fā)RuntimeError
。
- ZipFile.writestr(zinfo_or_arcname, data, compress_type=None, compresslevel=None)?
將一個文件寫入歸檔。 內(nèi)容為 data,它可以是一個
str
或bytes
的實例;如果是str
,則會先使用 UTF-8 進(jìn)行編碼。 zinfo_or_arcname 可以是它在歸檔中將被給予的名稱,或者是ZipInfo
的實例。 如果它是一個實例,則至少必須給定文件名、日期和時間。 如果它是一個名稱,則日期和時間會被設(shè)為當(dāng)前日期和時間。 歸檔必須以'w'
,'x'
或'a'
模式打開。如果給定了 compress_type,它將會覆蓋作為新條目構(gòu)造器的 compression 形參或在 zinfo_or_arcname (如果是一個
ZipInfo
實例) 中所給出的值。 類似地,如果給定了 compresslevel,它將會覆蓋構(gòu)造器。備注
當(dāng)傳入一個
ZipInfo
實例作為 zinfo_or_arcname 形參時,所使用的壓縮方法將為在給定的ZipInfo
實例的 compress_type 成員中指定的方法。 默認(rèn)情況下,ZipInfo
構(gòu)造器將將此成員設(shè)為ZIP_STORED
。在 3.2 版更改: compress_type 參數(shù)。
在 3.6 版更改: 在使用
'r'
模式創(chuàng)建的 ZipFile 或已關(guān)閉的 ZipFile 上調(diào)用writestr()
將引發(fā)ValueError
。 在之前的版本中則會引發(fā)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'
.3.11 新版功能.
以下數(shù)據(jù)屬性也是可用的:
- ZipFile.filename?
ZIP 文件的名稱。
- ZipFile.debug?
要使用的調(diào)試輸出等級。 這可以設(shè)為從
0
(默認(rèn)無輸出) 到3
(最多輸出) 的值。 調(diào)試信息會被寫入sys.stdout
。
Path 對象?
- class zipfile.Path(root, at='')?
根據(jù)
root
zipfile (它可以是一個ZipFile
實例或適合傳給ZipFile
構(gòu)造器的file
) 構(gòu)造一個 Path 對象。at
指定此 Path 在 zipfile 中的位置,例如 'dir/file.txt', 'dir/' 或 ''。 默認(rèn)為空字符串,即指定跟目錄。
Path 對象會公開 pathlib.Path
對象的下列特性:
Path 對象可以使用 /
運算符或 joinpath
來進(jìn)行遍歷。
- Path.name?
最終的路徑組成部分。
- Path.open(mode='r', *, pwd, **)?
在當(dāng)前路徑上發(fā)起調(diào)用
ZipFile.open()
。 允許通過支持的模式打開用于讀取或?qū)懭胛谋净蚨M(jìn)制數(shù)據(jù): 'r', 'w', 'rb', 'wb'。 當(dāng)以文本模式打開時位置和關(guān)鍵字參數(shù)會被傳給io.TextIOWrapper
,在其他情況下則會被忽略。pwd
是要傳給ZipFile.open()
的pwd
形參。在 3.9 版更改: 增加了對以文本和二進(jìn)制模式打開的支持。 現(xiàn)在默認(rèn)為文本模式。
- Path.iterdir()?
枚舉當(dāng)前目錄的子目錄。
- Path.is_dir()?
如果當(dāng)前上下文引用了一個目錄則返回
True
。
- Path.is_file()?
如果當(dāng)前上下文引用了一個文件則返回
True
。
- Path.exists()?
如果當(dāng)前上下文引用了 zip 文件內(nèi)的一個文件或目錄則返回
True
。
- Path.suffix?
The file extension of the final component.
3.11 新版功能: Added
Path.suffix
property.
- Path.suffixes?
A list of the path’s file extensions.
3.11 新版功能: Added
Path.suffixes
property.
- Path.read_text(*, **)?
讀取當(dāng)前文件為 unicode 文本。 位置和關(guān)鍵字參數(shù)會被傳遞給
io.TextIOWrapper
(buffer
除外,它將由上下文確定)。
- Path.read_bytes()?
讀取當(dāng)前文件為字節(jié)串。
- Path.joinpath(*other)?
返回一個新的 Path 對象,其中合并了每個 other 參數(shù)。 以下代碼是等價的:
>>> Path(...).joinpath('child').joinpath('grandchild') >>> Path(...).joinpath('child', 'grandchild') >>> Path(...) / 'child' / 'grandchild'
在 3.10 版更改: 在 3.10 之前,
joinpath
未被寫入文檔并且只接受一個形參。
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.
PyZipFile 對象?
PyZipFile
構(gòu)造器接受與 ZipFile
構(gòu)造器相同的形參,以及一個額外的形參 optimize。
- class zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, optimize=- 1)?
3.2 新版功能: optimize 形參。
在 3.4 版更改: 默認(rèn)啟用 ZIP64 擴(kuò)展。
實例在
ZipFile
對象所具有的方法以外還附加了一個方法:- writepy(pathname, basename='', filterfunc=None)?
查找
*.py
文件并將相應(yīng)的文件添加到歸檔。如果
PyZipFile
的 optimize 形參未給定或為-1
,則相應(yīng)的文件為*.pyc
文件,并在必要時進(jìn)行編譯。如果
PyZipFile
的 optimize 形參為0
,1
或2
,則限具有相應(yīng)優(yōu)化級別 (參見compile()
) 的文件會被添加到歸檔,并在必要時進(jìn)行編譯。如果 pathname 是文件,則文件名必須以
.py
為后綴,并且只有 (相應(yīng)的*.pyc
) 文件會被添加到最高層級(不帶路徑信息)。 如果 pathname 不是以.py
為后綴的文件,則將引發(fā)RuntimeError
。 如果它是目錄,并且該目錄不是一個包目錄,則所有的*.pyc
文件會被添加到最高層級。 如果目錄是一個包目錄,則所有的*.pyc
會被添加到包名所表示的文件路徑下,并且如果有任何子目錄為包目錄,則會以排好的順序遞歸地添加這些目錄。basename 僅限在內(nèi)部使用。
如果給定 filterfunc,則它必須是一個接受單個字符串參數(shù)的函數(shù)。 在將其添加到歸檔之前它將被傳入每個路徑(包括每個單獨的完整路徑)。 如果 filterfunc 返回假值,則路徑將不會被添加,而如果它是一個目錄則其內(nèi)容將被忽略。 例如,如果我們的測試文件全都位于
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()
方法會產(chǎn)生帶有這樣一些文件名的歸檔: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()
和 ZipFile
對象的 infolist()
方法返回。 每個對象將存儲關(guān)于 ZIP 歸檔的一個成員的信息。
有一個類方法可以為文件系統(tǒng)文件創(chuàng)建 ZipInfo
實例:
- classmethod ZipInfo.from_file(filename, arcname=None, *, strict_timestamps=True)?
為文件系統(tǒng)中的文件構(gòu)造一個
ZipInfo
實例,并準(zhǔn)備將其添加到一個 zip 文件。filename 應(yīng)為文件系統(tǒng)中某個文件或目錄的路徑。
如果指定了 arcname,它會被用作歸檔中的名稱。 如果未指定 arcname,則所用名稱與 filename 相同,但將去除任何驅(qū)動器盤符和打頭的路徑分隔符。
strict_timestamps 參數(shù)在設(shè)為
False
時允許壓縮早于 1980-01-01 的文件,代價時會將時間戳設(shè)為 1980-01-01。 類似的行為也會對晚于 2107-12-31 的文件發(fā)生,時間戳也會被設(shè)為該上限值。3.6 新版功能.
在 3.6.2 版更改: filename 形參接受一個 path-like object。
3.8 新版功能: strict_timestamps 僅限關(guān)鍵字參數(shù)
實例具有下列方法和屬性:
- ZipInfo.is_dir()?
如果此歸檔成員是一個目錄則返回
True
。這會使用條目的名稱:目錄應(yīng)當(dāng)總是以
/
結(jié)尾。3.6 新版功能.
- ZipInfo.filename?
歸檔中的文件名稱。
- ZipInfo.date_time?
上次修改存檔成員的時間和日期。這是六個值的元組:
索引
值
0
Year (>= 1980)
1
月(1為基數(shù))
2
月份中的日期(1為基數(shù))
3
小時(0為基數(shù))
4
分鐘(0為基數(shù))
5
秒(0為基數(shù))
備注
ZIP文件格式不支持1980年以前的時間戳。
- ZipInfo.compress_type?
歸檔成員的壓縮類型。
- ZipInfo.extra?
擴(kuò)展字段數(shù)據(jù)。 PKZIP Application Note 包含一些保存于該
bytes
對象中的內(nèi)部結(jié)構(gòu)的注釋。
- ZipInfo.create_system?
創(chuàng)建 ZIP 歸檔所用的系統(tǒng)。
- ZipInfo.create_version?
創(chuàng)建 ZIP 歸檔所用的 PKZIP 版本。
- ZipInfo.extract_version?
需要用來提取歸檔的 PKZIP 版本。
- ZipInfo.reserved?
必須為零。
- ZipInfo.flag_bits?
ZIP 標(biāo)志位。
- ZipInfo.volume?
文件頭的分卷號。
- ZipInfo.internal_attr?
內(nèi)部屬性。
- ZipInfo.external_attr?
外部文件屬性。
- ZipInfo.header_offset?
文件頭的字節(jié)偏移量。
- ZipInfo.CRC?
未壓縮文件的 CRC-32。
- ZipInfo.compress_size?
已壓縮數(shù)據(jù)的大小。
- ZipInfo.file_size?
未壓縮文件的大小。
命令行接口?
zipfile
模塊提供了簡單的命令行接口用于與 ZIP 歸檔的交互。
如果你想要創(chuàng)建一個新的 ZIP 歸檔,請在 -c
選項后指定其名稱然后列出應(yīng)當(dāng)被包含的文件名:
$ 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 格式或不受支持的壓縮 / 解密方法而失敗。
文件系統(tǒng)限制?
超出特定文件系統(tǒng)上的限制可能會導(dǎo)致解壓縮失敗。 例如目錄條目所允許的字符、文件名的長度、路徑名的長度、單個文件的大小以及文件的數(shù)量等等。
資源限制?
缺乏內(nèi)存或磁盤空間將會導(dǎo)致解壓縮失敗。 例如,作用于 zipfile 庫的解壓縮炸彈 (即 ZIP bomb) 就可能造成磁盤空間耗盡。
中斷?
在解壓縮期間中斷執(zhí)行,例如按下 ctrl-C 或殺死解壓縮進(jìn)程可能會導(dǎo)致歸檔文件的解壓縮不完整。
提取的默認(rèn)行為?
不了解提取的默認(rèn)行為可能導(dǎo)致不符合期望的解壓縮結(jié)果。 例如,當(dāng)提取相同歸檔兩次時,它會不經(jīng)詢問地覆蓋文件。