python zipfile_python zipfile - 刘江的python教程
zipfile
閱讀:?12164
評論:0
ZIP是通用的歸檔和壓縮格式。zipfile模塊提供了通用的創建、讀取、寫入、附加和顯示壓縮文件的方法,你可以簡單地把它理解為Python中的zip解壓縮軟件。該模塊可以解密帶有密碼的壓縮文件,但不提供附加密碼的壓縮功能。
定義的類和異常
class zipfile.ZipFile
模塊最重要的類。用于讀寫ZIP文件。
class zipfile.PyZipFile
創建包含Python庫的ZIP歸檔文件的類
class zipfile.ZipInfo(filename='NoName', date_time=(1980, 1, 1, 0, 0, 0))
用于顯示ZIP文件信息的類。ZIP對象的getinfo()或infolist()方法會返回一個該類的實例。filename是ZIP文件的完整名稱。date_time是一個包含6個元素的元組,描述文件最近修改時間。
zipfile.is_zipfile(filename)
如果文件是個ZIP文件則返回True,否則False。
zipfile.ZIP_STORED
未壓縮的歸檔文件的數字常數。
zipfile.ZIP_DEFLATED
常用的ZIP壓縮方法。
zipfile.ZIP_BZIP2
BZIP2壓縮方法的數字常量。
zipfile.ZIP_LZMA
LZMA壓縮方法的數字常量。
exception zipfile.BadZipFile
ZIP文件被損壞異常。3.2版本新增。
exception zipfile.LargeZipFile
當需要ZIP64功能,但未開啟該功能時彈出異常。
ZipFile對象
class zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True)
打開一個ZIP文件。返回的也是一個類似文件的ZipFile對象,可以讀寫。
file可以是一個文件地址字符串、文件類對象或地址類對象。mode參數為r時,表示讀取一個已經存在的文件;為w的時候表示覆蓋或寫入一個新文件;為a時表示在已有文件后追加;為x時表示新建文件并寫入。x模式下,如果文件名已經存在,則拋出FileExistsError異常。這些特點和open()方法打開文件一樣樣的。
compression指明壓縮格式,支持ZIP_STORED, ZIP_DEFLATED, ZIP_BZIP2和ZIP_LZMA。使用不支持的格式會拋出NotImplementedError異常。默認是ZIP_STORED格式。如果指定為ZIP_DEFLATED, ZIP_BZIP2或者ZIP_LZMA格式,但對應的支持模塊zlib, bz2或者lzma不可用,則拋出RuntimeError異常。
當文件大小超過4GB時,將使用ZIP64擴展(默認啟用)。
在w/x/a模式下,如果沒有寫入任何數據就close了,則會生成空的ZIP文件。
ZipFile也是一種上下文管理器(3.2版本新特性),同樣支持with語句,如下例子所示:
with ZipFile('spam.zip', 'w') as myzip:
myzip.write('eggs.txt')
ZipFile.write(filename, arcname=None, compress_type=None)
往ZIP文件里添加新文件,單個文件可以重復添加,但是會彈出警告。如果指定arcname參數,則在ZIP文件內部將原來的filename改成arcname。例如z.write("test/111.txt", "test22/111.txt")
import zipfile
import os
z = zipfile.ZipFile("test.zip", "w")
z.write(r"d:\test\1.txt") # 注意路徑的寫法
z.write(r"d:\test\2.txt")
z.write(r"d:\\test\test.txt")
z.write(r"d:\\test\test.py")
z.close()
print(os.getcwd())
ZipFile.close()
確保壓縮文件被正確關閉。
ZipFile.getinfo(name)
返回一個被壓縮成員的ZipInfo對象。如果ZIP文件中沒有該名字,將拋出異常。
ZipFile.infolist()
返回一個包含ZIP文件內所有成員信息的ZipInfo對象。
ZipFile.namelist()
返回ZIP文件內所有成員名字列表。
ZipFile.open(name, mode='r', pwd=None, *, force_zip64=False)
訪問檔案中的指定文件。pwd是解壓密碼。該方法也是個上下文管理器,支持with語法。
with ZipFile('spam.zip') as myzip:
with myzip.open('eggs.txt') as myfile:
print(myfile.read())
r模式為只讀模式,提供read(), readline(), readlines(), __iter__(), __next__()等方法.
w模式為寫入模式,支持write()方法。此時對ZIP文件內其它成員的讀寫將拋出ValueError異常。
>>> import zipfile
>>> z = zipfile.ZipFile(r"d:\test.zip")
>>> z.namelist()
['test/1.txt', 'test/2.txt', 'test/test.txt', 'test/test.py']
>>> z.infolist()
[, , , ]
>>> z.getinfo("test/1.txt")
>>> t = z.open("test/1.txt")
>>> ret = t.read()
>>> ret
b'asdasdasd'
ZipFile.extract(member, path=None, pwd=None)
解壓單個文件。核心方法之一。將ZIP文件中的某個成員解壓到當前目錄。member必須是完整名,path是指定的解壓目錄。解壓的過程不會破壞原壓縮文件。
ZipFile.extractall(path=None, members=None, pwd=None)
批量解壓文件。默認是全部解壓。核心方法之一。
>>> z.extract("test/1.txt")
'C:\\Python36\\test\\1.txt'
>>> z.namelist()
['test/1.txt', 'test/2.txt', 'test/test.txt', 'test/test.py']
>>> z.extractall()
>>> z.namelist()
['test/1.txt', 'test/2.txt', 'test/test.txt', 'test/test.py']
>>> z.wirte(r"d:\3.txt")
Traceback (most recent call last):
File "", line 1, in
z.wirte(r"d:\3.txt")
AttributeError: 'ZipFile' object has no attribute 'wirte'
>>> z.close()
>>> z = zipfile.ZipFile(r"d:\test.zip", "w")
>>> z.namelist()
[]
>>> z.write(r"d:\3.txt")
>>> z.close()
>>> z = zipfile.ZipFile(r"d:\test.zip", "a")
>>> z.write(r"d:\3.txt")
Warning (from warnings module):
File "C:\Python36\lib\zipfile.py", line 1349
return self._open_to_write(zinfo, force_zip64=force_zip64)
UserWarning: Duplicate name: '3.txt'
>>> z.write(r"d:\4.txt")
>>> z.namelist()
['3.txt', '3.txt', '4.txt']
>>> z.close()
ZipFile.printdir()
在stdout上打印ZIP文件的目錄表。
ZipFile.setpassword(pwd)
設置通用的解壓密碼,用于解壓加密壓縮文件。
ZipFile.read(name, pwd=None)
從已打開的ZIP文件成員中讀取數據。
ZipFile.testzip()
校驗ZIP文件完整性。
ZipFile.writestr(zinfo_or_arcname, data[, compress_type])
往ZIP文件里添加字符串類型數據
ZipFile.filename
ZIP文件的名字
ZipFile.debug
調試輸出的級別。從0到3。
ZipFile.comment
ZIP文件的注釋內容。
總結
zipfile模塊其實很簡單,記住下面幾個重要的方法就可以了。
方法
用途
z = zipfile.ZipFile()
打開或者新建一個zip文件對象
z.write()
添加文件到壓縮包內
z.infolist()
查看壓縮包內的文件信息
z.extract()
解壓單個文件
z.extractall()
解壓所有文件
z.close()
關閉壓縮文件
評論總數: 0
總結
以上是生活随笔為你收集整理的python zipfile_python zipfile - 刘江的python教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python异常处理时所使用的保留字_P
- 下一篇: 紫金县苏区镇黄布村有多少个姓氏