''''
@author:Peng (不是原始的) ) ) ) )。
记录:开发历史记录
''''
最近正在编写Android APP,但需要下载服务器上的数据。 部分PDF直接传输会增加通信的数据量,增加下载时间。 服务器可以在传输这些数据之前进行压缩,并在客户端收到数据后进行解压缩,从而减少互联网上传输的数据通信量,缩短下载时间,提高客户满意度。 使用zipfile模块提供的api,可以轻松地在Python上执行类似的任务。
zip文件格式是常用的文档压缩标准,ziplib模块使用ZipFile类处理zip文件。 具体说明如下。
classzipfile.zipfile(file[,mode[,compression[,allowZip64]]] )
创建表示zip文件的ZipFile对象。 参数file是文件的路径或类文件对象(file-like object ); 参数模式指示打开zip文件的模式,默认值为“r”,指示要读取已经存在的zip文件,而“w”或“a”,“w”指示创建新的zip文档或现有的zip文档参数compression表示创建zip文档时使用的压缩方法。 可以使用zipfile.ZIP_STORED或zipfile.ZIP_DEFLATED值。 zipfile.ZIP_STORED是缺省压缩方法,仅存储,不压缩内容。如果操作的zip文件大小超过2G,则必须将allowZip64设置为True。
ZipFile还提供了以下常用方法和属性:
zipfile.Getinfo(name ) :
获取zip文档中指定文件的信息。 返回包含文件详细信息的zipfile.ZipInfo对象。 关于这个对象,在下面具体说明。
ZipFile.infolist (
获取zip文档中所有文件的信息,并返回zipfile.ZipInfo列表。
ZipFile.namelist (
获取zip文档中所有文件的名称列表。
zipfile.extract(member[,path[,pwd]] ) )
将zip文档中的指定文件解压缩到当前目录。 参数member指定要解压缩的文件名或相应的ZipInfo对象。 参数path指定存储分析文件的文件夹。 参数pwd是解压缩密码。 下面的示例将程序根目录下存储在txt.zip中的所有文件解压缩到D:/Work目录中:
Python
1
2
3
4
5
导入zipfile,操作系统
zipfile=zipfile.zipfile (OS.path.join (OS.getcwd )、' txt.zip ' ) )
forfileinzipFile.namelist () :
zipfile.extract(file,r'd:/Work ' ) )。
zipFile.close (
zipfile.extractall([path[,members[,pwd]]]
将zip文档中的所有文件解压缩到当前目录中。 参数members的默认值是zip文档中所有文件名的列表,但您也可以选择自己设置和解压缩的文件名。
ZipFile.printdir (
将zip文档中的信息打印到控制台。
ZipFile.setpassword(pwd )
设置zip文档的密码。
zipfile.read(name (,pwd ) )
获取zip文档中指定文件的二进制数据。 以下示例说明如何使用zip文档中的txt.txt文本文件,以及如何使用read ()方法读取二进制数据并将其保存在D:/txt.txt中的read )。
Python
1
2
3
4
5
6
#coding=gbk
导入zipfile,操作系统
zipfile=zipfile.zipfile (OS.path.join (OS.getcwd )、' txt.zip ' ) )
DATA=zipfile.read('txt.txt ' ) ) ) ) ) ) ) ) )。
(lambdaf,d:(f.write(d,f.close ) ) open ) r'd:/txt.txt ',' wb ' ),data )一行中文件写入完毕好好想想哦~~~
zipFile.close (
zipfile.write(filename[,arcname[,compress_type]] ) )
将指定的文件添加到zip文档中。 filename为文件路径,arcname为添加到zip文档后保存的名称,compress_type参数表示压缩方法,值为zipfile.ZIP_STORED或zipfile
. ZIP_DEFLATED。下面的例子演示了如何创建一个zip文档,并将文件D:/test.doc添加到压缩文档中。Python
1
2
3
4
importzipfile,os
zipFile=zipfile.ZipFile(r'D:/test.zip'),'w')
zipFile.write(r'D:/test.doc','ok.doc',zipfile.ZIP_DEFLATED)
zipFile.close()
ZipFile.writestr(zinfo_or_arcname, bytes)
writestr()支持将二进制数据直接写入到压缩文档。
Class ZipInfo
ZipFile.getinfo(name) 方法返回的是一个ZipInfo对象,表示zip文档中相应文件的信息。它支持如下属性:
ZipInfo.filename: 获取文件名称。
ZipInfo.date_time: 获取文件最后修改时间。返回一个包含6个元素的元组:(年, 月, 日, 时, 分, 秒)
ZipInfo.compress_type: 压缩类型。
ZipInfo.comment: 文档说明。
ZipInfo.extr: 扩展项数据。
ZipInfo.create_system: 获取创建该zip文档的系统。
ZipInfo.create_version: 获取 创建zip文档的PKZIP版本。
ZipInfo.extract_version: 获取 解压zip文档所需的PKZIP版本。
ZipInfo.reserved: 预留字段,当前实现总是返回0。
ZipInfo.flag_bits: zip标志位。
ZipInfo.volume: 文件头的卷标。
ZipInfo.internal_attr: 内部属性。
ZipInfo.external_attr: 外部属性。
ZipInfo.header_offset: 文件头偏移位。
ZipInfo.CRC: 未压缩文件的CRC-32。
ZipInfo.compress_size: 获取压缩后的大小。
ZipInfo.file_size: 获取未压缩的文件大小。
下面一个简单的例子说明这些属性的意思:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
importzipfile,os
zipFile=zipfile.ZipFile(os.path.join(os.getcwd(),'txt.zip'))
zipInfo=zipFile.getinfo('doc.doc')
print'filename:',zipInfo.filename
print'date_time:',zipInfo.date_time
print'compress_type:',zipInfo.compress_type
print'comment:',zipInfo.comment
print'extra:',zipInfo.extra
print'create_system:',zipInfo.create_system
print'create_version:',zipInfo.create_version
print'extract_version:',zipInfo.extract_version
print'extract_version:',zipInfo.reserved
print'flag_bits:',zipInfo.flag_bits
print'volume:',zipInfo.volume
print'internal_attr:',zipInfo.internal_attr
print'external_attr:',zipInfo.external_attr
print'header_offset:',zipInfo.header_offset
print'CRC:',zipInfo.CRC
print'compress_size:',zipInfo.compress_size
print'file_size:',zipInfo.file_size
zipFile.close()
感觉使用zipfile模块来处理zip文件真的很简单。通过阅读python手册,一两个小时就掌握了zipfile模块的基本使用。哈哈,使用Python,真爽!