ZIP文件格式是一(yī)種常用的歸檔和(hé)壓縮标準。此模塊提供了(le)創建,讀取,寫入,追加和(hé)列出ZIP文件的工(gōng)具。此模塊的任何高級用法都(dōu)需要(yào)了(le)解PKZIP應用說明(míng)中定義的格式。
此模塊目前不處理多磁盤ZIP文件。它可(kě)以處理使用ZIP64擴展名的ZIP文件(即大小超過4 GB的ZIP文件)。它支持在ZIP壓縮文件中解密加密文件,但(dàn)它目前不能(néng)創建加密文件。解密過程非常緩慢(màn),因為(wèi)它在本地(dì)Python而不是C中實現。
該模塊定義了(le)以下(xià)項目:
exception zipfile.BadZipfile
錯誤的ZIP文件(舊(jiù)名稱:)提出的錯誤zipfile.error。
exception zipfile.LargeZipFile
ZIP文件需要(yào)ZIP64功能(néng)但(dàn)尚未啓用時(shí)引發的錯誤。
class zipfile.ZipFile
用于讀寫ZIP文件的類。有關構造函數(shù)的詳細信息,請(qǐng)參見(jiàn)ZipFile Objects部分。
class zipfile.PyZipFile
用于創建包含Python庫的ZIP存檔的類。
class zipfile.ZipInfo([filename[, date_time]])
用于表示關于檔案成員(yuán)的信息的類。這(zhè)個類的實例由對象的方法getinfo()和(hé)infolist()方法返回ZipFile。該zipfile模塊的大多數(shù)用戶不需要(yào)創建這(zhè)些,但(dàn)隻能(néng)使用由該模塊創建的那(nà)些用戶。文件名應該是檔案成員(yuán)的全名,并且date_time應該是包含六個字段的元組,其描述對文件的最後修改的時(shí)間(jiān); 這(zhè)些字段在ZipInfo對象中進行(xíng)了(le)描述。
zipfile.is_zipfile(filename)
返回True如(rú)果文件名是基于它的幻數(shù)有效的ZIP文件,否則回報False。文件名也可(kě)以是文件或類似文件的對象。
在版本2.7中更改:支持文件和(hé)文件類對象。
zipfile.ZIP_STORED
未壓縮的歸檔成員(yuán)的數(shù)字常量。
zipfile.ZIP_DEFLATED
常用ZIP壓縮方法的數(shù)字常量。這(zhè)需要(yào)zlib模塊。目前不支持其他(tā)壓縮方法。
1. ZipFile對象
class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
打開(kāi)一(yī)個ZIP文件,其中文件可(kě)以是文件路徑(字符串)或文件類型的對象。該模式參數(shù)應該是'r'讀取現有的文件,'w'以截斷并寫入一(yī)個新的文件,或'a'将追加到現有文件。如(rú)果模式是,'a'并且文件引用了(le)現有的ZIP文件,則會向其中添加其他(tā)文件。如(rú)果文件沒有引用ZIP文件,則新的ZIP歸檔文件被追加到文件中。這(zhè)是為(wèi)了(le)将ZIP壓縮文件添加到其他(tā)文件(如(rú)python.exe)。
在版本2.6中更改:如(rú)果模式是,a并且該文件根本不存在,則會創建它。
壓縮是編寫壓縮文件時(shí)使用的ZIP壓縮方法,應該是ZIP_STORED或ZIP_DEFLATED; 無法識别的值會導緻RuntimeError提高。如(rú)果ZIP_DEFLATED被指定,但(dàn)zlib模塊不可(kě)用,RuntimeError也會引發。默認是ZIP_STORED。如(rú)果allowZip64是Truezipfile,則會在zip文件大于2 GB時(shí)創建使用ZIP64擴展名的ZIP文件。如(rú)果它是假的(默認)zipfile會在ZIP文件需要(yào)ZIP64擴展時(shí)引發異常。默認情況下(xià)禁用ZIP64擴展,因為(wèi)Unix上(shàng)的默認zip和(hé)unzip命令(InfoZIP實用程序)不支持這(zhè)些擴展。
改變在2.7.1版本:如(rú)果文件與模式創建'a'或'w'再closed不添加任何文件到歸檔,一(yī)個空歸檔适當的ZIP結構将被寫入該文件。
ZipFile也是一(yī)個上(shàng)下(xià)文管理器,因此支持該with語句。在這(zhè)個例子中,myzip在with語句套件完成後關閉- 即使發生異常:
with ZipFile('static/file/app-release', 'w') as myzip:
myzip.write('eggs.txt')
複制
2.7版新增功能(néng):增加了(le)ZipFile用作(zuò)上(shàng)下(xià)文管理器的功能(néng)。
ZipFile.close()
關閉檔案文件。您必須close()在退出程序之前撥打電話,否則不會寫入重要(yào)記錄。
ZipFile.getinfo(name)
ZipInfo用關于存檔成員(yuán)名稱的信息返回一(yī)個對象。調用getinfo()存檔中當前不包含的名稱将引發一(yī)個KeyError。
ZipFile.infolist()
返回包含ZipInfo每個檔案成員(yuán)的對象的列表。如(rú)果打開(kāi)了(le)現有的存檔,則這(zhè)些對象與磁盤上(shàng)實際ZIP文件中的條目順序相同。
ZipFile.namelist()
按名稱返回存檔成員(yuán)列表。
ZipFile.open(name[, mode[, pwd]])
從(cóng)存檔中提取成員(yuán)為(wèi)文件類對象(ZipExtFile)。name是檔案中文件的名稱或ZipInfo對象。所述模式參數(shù),如(rú)果包括的話,必須是下(xià)列之一(yī):'r'(默認值),'U'或'rU'。在隻讀對象中選擇'U'或'rU'将啓用通(tōng)用換行(xíng)支持。pwd是用于加密文件的密碼。調用open()一(yī)個封閉的ZipFile将引發一(yī)個RuntimeError。
注釋
的類文件對象是隻讀的,并且提供了(le)以下(xià)的方法:read(),readline(),readlines(),__iter__(),next()。
注釋
如(rú)果通(tōng)過傳入類文件對象作(zuò)為(wèi)構造函數(shù)的第一(yī)個參數(shù)來創建ZipFile,那(nà)麽通(tōng)過open()共享ZipFile的文件指針返回的對象。在這(zhè)些情況下(xià),open()在ZipFile對象上(shàng)執行(xíng)任何其他(tā)操作(zuò)之後,不應該使用返回的對象。如(rú)果ZipFile是通(tōng)過傳入一(yī)個字符串(文件名)作(zuò)為(wèi)構造函數(shù)的第一(yī)個參數(shù)來open()創建的,那(nà)麽将創建一(yī)個新的文件對象,該對象将由ZipExtFile保存,允許它獨立于ZipFile進行(xíng)操作(zuò)。
注釋
open(),read()和(hé)extract()方法可(kě)利用一(yī)個文件名或ZipInfo對象。嘗試閱讀包含具有重複名稱的成員(yuán)的ZIP文件時(shí),您會明(míng)白這(zhè)一(yī)點。
2.6版本中的新功能(néng)。
ZipFile.extract(member[, path[, pwd]])
将存檔中的成員(yuán)提取到當前工(gōng)作(zuò)目錄; 成員(yuán)必須是其全名或ZipInfo對象)。其文件信息盡可(kě)能(néng)準确地(dì)提取。路徑指定要(yào)提取到的不同目錄。成員(yuán)可(kě)以是文件名或ZipInfo對象。pwd是用于加密文件的密碼。
返回創建的規範化路徑(目錄或新文件)。
2.6版本中的新功能(néng)。
注釋
如(rú)果成員(yuán)的文件名是絕對路徑,驅動/ UNC SharePoint和(hé)領導(回)斜線将被剝離,如(rú):///foo/bar成為(wèi)foo/bar在Unix,并C:\foo\bar成為(wèi)foo\bar在Windows上(shàng)。".."成員(yuán)文件名中的所有組件都(dōu)将被删除,例如(rú):../../foo../../ba..r成為(wèi)foo../ba..r。在Windows非法字符(:,<,>,|,",?,并*用下(xià)劃線代替)( _)。
ZipFile.extractall([path[, members[, pwd]]])
将存檔中的所有成員(yuán)提取到當前工(gōng)作(zuò)目錄。路徑指定要(yào)提取到的不同目錄。成員(yuán)是可(kě)選的,并且必須是返回列表的子集namelist()。pwd是用于加密文件的密碼。
警告
切勿在未經事先檢查的情況下(xià)從(cóng)不受信任的來源提取檔案。有可(kě)能(néng)文件是在路徑之外(wài)創建的,例如(rú)具有"/"以兩個點開(kāi)頭的絕對文件名或具有兩個點的文件名的成員(yuán)".."。
在2.7.4版本中進行(xíng)了(le)更改:zipfile模塊試圖阻止該問(wèn)題。見(jiàn)extract()注。
2.6版本中的新功能(néng)。
ZipFile.printdir()
打印存檔的目錄到sys.stdout。
ZipFile.setpassword(pwd)
将pwd設置為(wèi)默認密碼以提取加密文件。
2.6版本中的新功能(néng)。
ZipFile.read(name[, pwd])
返回檔案中文件名稱的字節。name是檔案中文件的名稱或ZipInfo對象。檔案必須打開(kāi)才能(néng)閱讀或追加。pwd是用于加密文件的密碼,如(rú)果指定,它将覆蓋使用默認密碼設置setpassword()。調用read()一(yī)個封閉的ZipFile将引發一(yī)個RuntimeError。
在版本2.6中更改:pwd已添加,名稱現在可(kě)以是ZipInfo對象。
ZipFile.testzip()
閱讀檔案中的所有文件,并檢查它們的CRC和(hé)文件頭。返回第一(yī)個錯誤文件的名稱,否則返回None。調用testzip()一(yī)個封閉的ZipFile将引發一(yī)個RuntimeError。
ZipFile.write(filename[, arcname[, compress_type]])
寫命名的文件的文件名到歸檔,給它存檔名稱arcname(默認情況下(xià),這(zhè)将是相同的文件名,但(dàn)沒有一(yī)個驅動器号和(hé)與領先的路徑分隔符删除)。如(rú)果給定,compress_type将為(wèi)新條目覆蓋為(wèi)壓縮參數(shù)給構造函數(shù)指定的值。歸檔文件必須以模式打開(kāi),'w'或者'a'- 調用write()使用模式創建的ZipFile 'r'将引發一(yī)個RuntimeError。調用write()一(yī)個封閉的ZipFile将引發一(yī)個RuntimeError。
注釋
ZIP文件沒有官方文件名編碼。如(rú)果你有unicode文件名,你必須在将它們傳遞給你所需的編碼之前将它們轉換為(wèi)字節串write()。WinZip将所有文件名解釋為(wèi)在CP437中編碼,也稱為(wèi)DOS Latin。
注釋
檔案名稱應該與檔案根目錄相關,也就是說,它們不應該以路徑分隔符開(kāi)頭。
注釋
如(rú)果arcname(或者filename如(rú)果arcname未給出)包含空字節,則歸檔文件的名稱将在空字節處截斷。
ZipFile.writestr(zinfo_or_arcname, bytes[, compress_type])
将字符串字節寫入存檔; zinfo_or_arcname是它将在檔案中給出的文件名稱,或者是一(yī)個ZipInfo實例。如(rú)果它是一(yī)個實例,至少(shǎo)必須給出文件名,日期和(hé)時(shí)間(jiān)。如(rú)果是名稱,則日期和(hé)時(shí)間(jiān)設置為(wèi)當前日期和(hé)時(shí)間(jiān)。檔案必須用模式打開(kāi)'w'或'a'- 調用writestr()一(yī)個用模式創建的ZipFile 'r'會引發一(yī)個RuntimeError。調用writestr()一(yī)個封閉的ZipFile将引發一(yī)個RuntimeError。
如(rú)果給定,compress_type将覆蓋為(wèi)新條目的構造函數(shù)提供的壓縮參數(shù)的值,或覆蓋zinfo_or_arcname(如(rú)果是ZipInfo實例)的值。
注釋
當将ZipInfo實例作(zuò)為(wèi)zinfo_or_arcname參數(shù)傳遞時(shí),所使用的壓縮方法将是給定實例的compress_type成員(yuán)中指定的壓縮方法ZipInfo。默認情況下(xià),ZipInfo構造函數(shù)将此成員(yuán)設置為(wèi)ZIP_STORED。
在版本2.7中更改:compress_type參數(shù)。
以下(xià)數(shù)據屬性也可(kě)用:
ZipFile.debug
要(yào)使用的調試輸出的級别。這(zhè)可(kě)以從(cóng)0(默認,無輸出)到3(最多輸出)設置。調試信息被寫入sys.stdout。
ZipFile.comment
與ZIP文件關聯的評論文本。如(rú)果為(wèi)ZipFile使用模式'a'或'w'創建的實例分配注釋,這(zhè)應該是不超過65535字節的字符串。比此更長(cháng)的評論在close()被調用時(shí)會在書(shū)面存檔中被截斷。
2. PyZipFile對象
該PyZipFile構造函數(shù)将相同的參數(shù)ZipFile構造函數(shù)。實例除了(le)那(nà)些ZipFile對象外(wài)還有一(yī)種方法。
PyZipFile.writepy(pathname[, basename])
搜索文件*.py并将相應的文件添加到存檔。*.pyo如(rú)果可(kě)用的話,相應的文件是一(yī)個文件,否則是一(yī)個*.pyc文件,必要(yào)時(shí)編譯。如(rú)果路徑名是一(yī)個文件,則文件名必須以.py,并且隻有(對應的*.py[co])文件被添加到頂層(無路徑信息)。如(rú)果路徑名是不是結束一(yī)個文件.py,一(yī)個RuntimeError将提高。如(rú)果它是一(yī)個目錄,并且該目錄不是一(yī)個包目錄,則所有文件*.py[co]都(dōu)将添加到頂層。如(rú)果該目錄是一(yī)個包目錄,則所有*.py[co]這(zhè)些目錄都(dōu)将作(zuò)為(wèi)文件路徑添加到包名下(xià),如(rú)果有任何子目錄是包目錄,則所有這(zhè)些都(dōu)将遞歸添加。基本名僅供內(nèi)部使用。該writepy()方法使用以下(xià)文件名進行(xíng)歸檔:
string.pyc # Top level name
test/__init__.pyc # Package directory
test/test_support.pyc # Module test.test_support
test/bogus/__init__.pyc # Subpackage directory
test/bogus/myfile.pyc # Submodule test.bogus.myfile
複制
3. ZipInfo對象
ZipInfo類的實例由對象的方法getinfo()和(hé)infolist()方法返回ZipFile。每個對象存儲有關ZIP存檔的單個成員(yuán)的信息。
實例具有以下(xià)屬性:
ZipInfo.filename
歸檔文件的名稱。
ZipInfo.date_time
上(shàng)次修改歸檔成員(yuán)的時(shí)間(jiān)和(hé)日期。這(zhè)是一(yī)個包含六個值的元組:
指數(shù) | 值 |
---|---|
0 | 年(nián)份(> = 1980年(nián)) |
1 | 月份(基于單位) |
2 | 一(yī)個月中的日(基于一(yī)) |
3 | 小時(shí)(從(cóng)零開(kāi)始) |
4 | 分鐘(zhōng)(從(cóng)零開(kāi)始) |
5 | 秒(零基) |
注意
1980年(nián)以前,ZIP文件格式不支持時(shí)間(jiān)戳。
ZipInfo.compress_type
歸檔成員(yuán)的壓縮類型。
ZipInfo.comment
評論個人(rén)檔案成員(yuán)。
ZipInfo.extra
擴展字段數(shù)據。在PKZIP應用筆(bǐ)記包含包含在該字符串數(shù)據的內(nèi)部結構的一(yī)些意見(jiàn)。
ZipInfo.create_system
創建ZIP檔案的系統。
ZipInfo.create_version
創建ZIP壓縮文件的PKZIP版本。
ZipInfo.extract_version
PKZIP版本需要(yào)提取歸檔。
ZipInfo.reserved
必須為(wèi)零。
ZipInfo.flag_bits
ZIP标志位。
ZipInfo.volume
文件頭的卷号。
ZipInfo.internal_attr
內(nèi)部屬性。
ZipInfo.external_attr
外(wài)部文件屬性。
ZipInfo.header_offset
字節偏移到文件頭。
ZipInfo.CRC
未壓縮文件的CRC-32。
ZipInfo.compress_size
壓縮數(shù)據的大小。
ZipInfo.file_size
未壓縮文件的大小。
4.命令行(xíng)界面
該zipfile模塊提供了(le)一(yī)個簡單的命令行(xíng)界面來與ZIP檔案進行(xíng)交互。
如(rú)果您想創建一(yī)個新的ZIP存檔,請(qǐng)在-c選項後指定其名稱,然後列出應包含的文件名:
$ python -m zipfile -c monty.zip spam.txt eggs.txt
複制
傳遞一(yī)個目錄也是可(kě)以接受的:
$ python -m zipfile -c monty.zip life-of-brian_1979/
複制
如(rú)果要(yào)将ZIP壓縮文件解壓縮到指定的目錄中,請(qǐng)使用以下(xià)-e選項:
$ python -m zipfile -e monty.zip target-dir/
複制
有關ZIP歸檔文件的列表,請(qǐng)使用以下(xià)-l選項:
static/file/app-release
複制
4.1.命令行(xíng)選項
-l <zipfile>
列出zipfile文件。
-c <zipfile> <source1> ... <sourceN>
從(cóng)源文件創建zipfile。
-e <zipfile> <output_dir>
将zipfile解壓縮到目标目錄中。
-t <zipfile>
糾錯
測試zip文件是否有效。
網站建設開(kāi)發|APP設計開(kāi)發|小程序建設開(kāi)發