ZIP文件格式是一个通用的压缩包,本模块主要提供了对这种格式文件进行创建、读取、写入、增加和读取文件列表。本模块不支持多卷压缩的功能,普通的ZIP文件只能4G大小,如果想使用更大的文件要使用ZIP64扩展方式。本模块支持打开有加密的压缩包文件,但不支持创建加密的压缩包文件,并且解密的速度比C语言的方式实现要慢。
exception zipfile.BadZipFile
当解压ZIP文件出错时抛出此异常。
exception zipfile.BadZipfile
兼容旧的异常,从Python3.2版本之后丢弃使用。
exception zipfile.LargeZipFile
当打开ZIP64压缩的文件时,但设置不允许支持这种格式时就会抛出异常。
class zipfile.ZipFile
定义读写ZIP文件的类。
class zipfile.PyZipFile
创建一个ZIP压缩类,包含Python库。
class zipfile.ZipInfo(filename='NoName', date_time=(1980, 1, 1, 0, 0, 0))
创建一个表示压缩包的信息类。
zipfile.is_zipfile(filename)
判断文件名的ZIP文件或文件对象是否为合法的ZIP文件,如果是返回True,否则返回False。
zipfile.ZIP_STORED
表示非压缩的常量。
zipfile.ZIP_DEFLATED
表示采用ZIP压缩的常量。
zipfile.ZIP_BZIP2
表示采用BZIP2压缩的常量。
zipfile.ZIP_LZMA
表示采用LZMA压缩的常量。
class zipfile.ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True)
打开ZIP文件,参数file可以压缩文件的名称或文件对象。参数mode是表示对压缩文件进行读或写,如果是w表示是写入,会清空文件已经存在的所有数据,再从头开始写入;参数compression是表示采用什么方式压缩,默认是存储不压缩;参数allowZip64是表示是否使用64位扩展的ZIP文件格式。
ZipFile.close()
关闭压缩包,在退出程序之前要调用此函数关闭,否则会丢失刚写入的数据。
ZipFile.getinfo(name)
返回一个ZipInfo对象。如果没有定义ZipInfo对象,就会抛出异常KeyError。
ZipFile.infolist()
返回压缩包里每个文件的ZipInfo对象列表。
ZipFile.namelist()
返回压缩里文件列表。
ZipFile.open(name, mode='r', pwd=None)
从一个压缩包里抽取一个文件,返回此文件对象。参数name是压缩包里的文件列表里的文件名称或者ZipInfo对象;参数mode是打开文件的模式,支持r,U,rU模式;参数pwd是打开压缩文件的密码。
ZipFile.extract(member, path=None, pwd=None)
从压缩包里抽取一个文件放到当前工作的目录下,参数member是文件名称或者ZipInfo对象;参数path是指定抽取文件放入的目标路径;参数pwd是解压的密码。
ZipFile.extractall(path=None, members=None, pwd=None)
从压缩包里抽取所有文件到当前工作的目录下,如果参数path设置就放到这个目录下面;参数members是可选的参数,如果设置,就是这部分的文件解压出来,并且设置文件列表要小于压缩包里所有文件的列表;参数pwd是解压的密码。
ZipFile.printdir()
以表格的形式把压缩包的信息向sys.stdout输出。
ZipFile.setpassword(pwd)
设置默认解压缩包的密码。参数pwd是解压密码。
ZipFile.read(name, pwd=None)
读取压缩包里指定的文件,返回相应数据。参数name是压缩包里指定的文件名称;参数pwd是解压的密码。
ZipFile.testzip()
读取压缩包里所有文件,并检查CRC和文件头是否正确,如果不正确返回第一个出错的文件名称;如果全部正确返回None。
ZipFile.write(filename, arcname=None, compress_type=None)
写文件名称filename的文件到压缩包。参数filename是要写入压缩的文件路径;参数arcname是写入的文件在压缩包里的文件名称;参数compress_type是指定压缩的方式,也即是不使用构造函数时的压缩级别。
ZipFile.writestr(zinfo_or_arcname, bytes[, compress_type])
写入字符串bytes到压缩包。参数zinfo_or_arcname是ZipInfo命名,还arcname名称命名;参数bytes是要写压缩包的名称;参数compress_type是压缩的类型。
ZipFile.debug
调试信息的输出的级别,可以设置从0到3,0表示没有调试信息输出,3表示输出尽可能多的信息。默认调试信息从sys.stdout输出。
ZipFile.comment
ZIP文件的备注信息,写入备注信息时需要压缩文件按a或w打开,并且备注信息不超过65535个字节。
class zipfile.PyZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, optimize=-1)
打开一个PyZipFile文件对象,参数与ZipFile类构造函数一样。
writepy(pathname, basename='', filterfunc=None)
搜索所有*.py文件,并添加到压缩包。参数pathname是一个文件名称,必须带有py后缀的文件,并且会把pyc或者pyo文件添加到压缩包;如果参数pathname是一个目录,在这个目录下面所有的.py文件都会添加到压缩包,同时会根据参数optimize来决定选择添加pyo文件,还是pyc文件。参数basename是内部使用;参数filterfunc是带有单一参数的函数,用来判断传送入来的文件是否添加到压缩包,如果返回False就不添加到压缩包。
从函数getinfo()和infolist()返回ZipInfo对象,每个对象的属性如下:
ZipInfo.filename
在压缩包里文件的名称。
ZipInfo.date_time
文件在压缩包里最后修改的时间。
ZipInfo.compress_type
采用什么压缩类型。
ZipInfo.comment
每个文件的备注信息。
ZipInfo.extra
压缩方法另外使用的数据。
ZipInfo.create_system
创建ZIP的系统名称。
ZipInfo.create_version
创建ZIP压缩包的PKZIP版本。
ZipInfo.extract_version
解压此压缩包的要求的PKZIP版本。
ZipInfo.reserved
保留字节,必须设置为0。
ZipInfo.flag_bits
ZIP标志位。
ZipInfo.volume
文件头的卷号。
ZipInfo.internal_attr
内部属性。
ZipInfo.external_attr
额外的文件属性。
ZipInfo.header_offset
相对文件头的偏移位置。
ZipInfo.CRC
未压缩时文件的CRC32校验码。
ZipInfo.compress_size
文件压缩之后数据的大小。
ZipInfo.file_size
文件未压缩之前的大小。
创建Zip文件的例子:
#python 3.4
import zipfile
zf = zipfile.ZipFile('F:\\temp\\py\\test.zip', mode = 'w')
try:
zf.write('F:\\temp\\py\\readme.txt')
print('写入文件')
finally:
zf.close()
print('关闭')
结果输出如下:
写入文件
关闭
追加文件的例子:
#python 3.4
import zipfile
zf = zipfile.ZipFile('F:\\temp\\py\\test.zip', mode = 'a')
try:
zf.write('F:\\temp\\py\\readme2.txt')
print('写入文件')
finally:
zf.close()
print('关闭')
结果输出如下:
写入文件
关闭
从追加文件例子看来,与创建Zip文件的例子相比,主要是写入的模式mode不同,创建使用w的模式,而追加是使用a的模式。
打开Zip文件的例子:
#python 3.4
import zipfile
#判断文件是否一个有效的ZIP文件
filename = 'F:\\temp\\py\\test.zip'
print('F:\\temp\\py\\test.zip: ', zipfile.is_zipfile(filename))
zf = zipfile.ZipFile(filename, mode = 'r')
#读取压缩包里的文件列表
print(zf.namelist())
for fn in zf.namelist():
data = zf.read(fn)
print(fn)
print(repr(data))
zf.close()
结果输出如下:
F:\temp\py\test.zip: True
['temp/py/readme.txt', 'temp/py/readme2.txt']
temp/py/readme.txt
b'http://blog.csdn.net/caimouse\r\nhttp://blog.csdn.net/caimouse\r\nhttp://blog.csdn.net/caimouse'
temp/py/readme2.txt
b'http://blog.csdn.net/caimouse\r\nhttp://blog.csdn.net/caimouse\r\nhttp://blog.csdn.net/caimouse'
打包py文件的例子:
#python 3.4
import zipfile
#判断文件是否一个有效的ZIP文件
filename = 'F:\\temp\\py\\testpy.zip'
zf = zipfile.PyZipFile(filename, mode = 'w')
try:
zf.debug = 3
zf.writepy('F:\\temp\\py')
finally:
zf.close()
for name in zf.namelist():
print(name)
zf.close()
结果输出如下:
Adding files from directory F:\temp\py
Compiling F:\temp\py\bisect2.py
Adding bisect2.pyc
Compiling F:\temp\py\cal_1.py
Adding cal_1.pyc
Compiling F:\temp\py\chainmap1.py
Adding chainmap1.pyc
Compiling F:\temp\py\chainmap2.py
Adding chainmap2.pyc
Compiling F:\temp\py\closescreen.py
Adding closescreen.pyc
Compiling F:\temp\py\codecs1.py
Adding codecs1.pyc
Compiling F:\temp\py\complex1.py
Adding complex1.pyc
Compiling F:\temp\py\copy1.py
Adding copy1.pyc
Compiling F:\temp\py\datetimetz.py
Adding datetimetz.pyc
Compiling F:\temp\py\dec1.py
Adding dec1.pyc
Compiling F:\temp\py\difflib1.py
Adding difflib1.pyc
Compiling F:\temp\py\difflib2.py
Adding difflib2.pyc
Compiling F:\temp\py\difflib3.py
Adding difflib3.pyc
Compiling F:\temp\py\difflib4.py
Adding difflib4.pyc
Compiling F:\temp\py\difflib5.py
Adding difflib5.pyc
Compiling F:\temp\py\test888.py
Adding test888.pyc
bisect2.pyc
cal_1.pyc
chainmap1.pyc
chainmap2.pyc
closescreen.pyc
codecs1.pyc
complex1.pyc
copy1.pyc
datetimetz.pyc
dec1.pyc
difflib1.pyc
difflib2.pyc
difflib3.pyc
difflib4.pyc
difflib5.pyc
test888.pyc
蔡军生 QQ:9073204 深圳