admin 管理员组文章数量: 1184232
ZipFile对象
顾名思义,
zipfile
是处理
zip
文件的模块,其中最重要的类是
ZipFile
,其构造函数为
ZipFile(file, mode='r', compression=ZIP_STORED, allowZip64=True, compresslevel=None,*, strict_timestamps=True)各参数含义如下
file文件路径或者文件对象mode文件打开模式,可以为r, w, a, x,表示读、写、追加、新建写入。compression压缩方案,可以是ZIP_STORED,ZIP_DEFLATED,ZIP_BZIP2或ZIP_LZMAallowZip64为True时,若文件大于4GiB,zipfile将创建使用ZIP64扩展的ZIP文件;为False则引发异常。compresslevel为压缩等级,在ZIP_DEFLATED时可选整数0-9,在ZIP_BZIP2时可选整数1-9,其他压缩方案不可用。strict_timestamps设为False时允许压缩早于1980年以前活2108年之后的文件,但时间戳会设为1980-01-01或2107-12-31。
写入压缩文件
下面对读写
zip
数据做一个简单的示例
import zipfile, os
test ="if you miss the train i'm on"*500with zipfile.ZipFile('test.zip','w')as z:
z.writestr("test.txt", test)效果如下
其中,
z.writestr("test.txt", test)
表示将
test
写入
test.txt
后,在存档到压缩文件
z
中。
读取和解压缩
能写就能读,下面来演示一下
Zipfile.read
的功能
z = zipfile.ZipFile('test.zip','r')
z.namelist()# 读取压缩文件中的文件列表# ['test.txt']
z.read('test.txt')# 读取`test.txt`中的内容# if you miss the train i'm onif you miss the train...
通过
printdir
可以查看压缩文件中更加详细的文件信息。
>>> z.printdir()
File Name Modified Size
test.txt 2023-01-1912:32:1214000
一般来说,通过代码来读写压缩文件是程序员的事儿,程序员要做的往往是给用户提供一个按钮,按下这个按钮可以实现压缩和解压缩。在
ZipFile
中,
extract
和
extract
可以便捷地将压缩包里面的文件解压到指定位置,下面代码将
z
中所有的文件解压到
test
文件夹中,如果
test
文件夹不存在,则创建。
z.extractall('test')常用属性
ZipFile
封装的属性和没有参数的常用方法如下
filenameZIP 文件的名称debug要使用的调试输出等级,可设0(默认无输出)到3(最多输出)comment关联到ZIP文件的字节对象形式的说明close()关闭归档文件,在退出程序之前必须调用,否则数据不会被写入。namelist()返回按名称排序的归档成员列表infolist()返回每个归档成员的 ZipInfo 对象printdir()打印归档的目录表testzip()读取归档中的所有文件并检查它们的 CRC 和文件头。 返回第一个已损坏文件的名称,在其他情况下则返回 None。
ZipInfo
通过
ZipFile.getinfo(name)
返回的是一个ZipInfo对象,如果
name
为空,则返回压缩包中所有文件的信息列表。
ZipInfo
对象支持如下属性:
| 属性 | 说明 | 属性 | 说明 |
|---|---|---|---|
| filename | 文件名称 | compress_type | 压缩类型 |
| date_time | 文件最后修改时间 | ||
| comment | 文档说明 | extr | 扩展项数据 |
| create_system | 创建该zip的系统 | ||
| create_version | 创建时的PKZIP版本 | extract_version | 解压所需PKZIP版本 |
| reserved | 预留字段,返回0 | ||
| flag_bits | zip标志位 | CRC | 未压缩文件的CRC-32 |
| volume | 文件头的卷标 | header_offset | 文件头偏移位。 |
| internal_attr | 内部属性 | external_attr | 外部属性 |
| compress_size | 压缩后大小 | file_size | 未压缩时大小 |
其中
date_time
的返回值是一个6元组,内容为:年月日时分秒,例如
>>> info = z.infolist()[0]>>> info.date_time
(2023,1,19,12,32,12)版权声明:本文标题:Python玩转ZIP压缩包:从基本操作到高级技巧 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1774499943a3571873.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论