10.5 zipfile--支持ZIP压缩包

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压缩的常量。

 

10.5.1 ZipFile对象

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是打开文件的模式,支持rUrU模式;参数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_arcnameZipInfo命名,还arcname名称命名;参数bytes是要写压缩包的名称;参数compress_type是压缩的类型。

 

ZipFile.debug

调试信息的输出的级别,可以设置从030表示没有调试信息输出,3表示输出尽可能多的信息。默认调试信息从sys.stdout输出。

 

ZipFile.comment

ZIP文件的备注信息,写入备注信息时需要压缩文件按aw打开,并且备注信息不超过65535个字节。


10.5.2 PyZipFile对象

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就不添加到压缩包。

 


10.5.2 ZipInfo对象

从函数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  深圳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值