supersu-v2.8.2.zip_术业有专攻:ZIP文件操作模块zipfile
本文约2380字,建议阅读时间12~15分钟
关键字:python,zip,压缩文件,zipfile
python标准库中提供了主流压缩文件格式(如gz、tar、zip等)的压缩与解压,如操作gz格式的gzip,tar格式的tarfile、zip格式的zipfile,其中zip文件是一种常用压缩标准文档。
1、异常
(1)zipfile.BadZipFile
#不标准的zip文件抛出的错误
(2)zipfile.LargeZipFile
#不是用ZIP64标准压缩的zip文件抛出的错误
2、常量
(1)zipfile.ZIP_STORED
#未压缩文档成员的数值型常数
(2)zipfile.ZIP_DEFLATED
#常用zip压缩方法的数值型常数,需要zlib模块
(3)zipfile.ZIP_BZIP2
#BZIP2压缩方法的数值型常数,需要bz2模块
(4)zipfile.ZIP_LZMA
#LZMA压缩方法的数值型常数,需要lzma模块
3、公共方法
判断文件是否为有效的zip文件
is_zipfile(filename)
#filename为文件或者类似文件的对象
4、ZipFile类
(1)对象的创建
from zipfile import ZipFile
zfile=ZipFile(file,mode=’r’,compression=ZIP_STORED,allowZip64=True,
compresslevel=None,strict_timestamps=True)
#file为文件名或者文件对象
#mode包括’r’、’w’、’a’、‘x’
#compression可以设置为上述常数中任一值
#allowZip64为True时表示将创建用ZIP64扩展的zip文件
#compressleve控制zip压缩层级,选择ZIP_STORED、ZIP_LZMA没有影响,ZIP_DEFLATED接受0-9的整数,ZIP_BZIP2接受1-9的整数
#strict_timestamps为python3.8引入,为True时,接受1980-01-01到2107-12-31之间的时间戳
假设在当前工作目录(如E:\my_project)下存在如下的zip压缩文件:
zf=ZipFile('E:\my_project\zipfile_sample.zip')
(2)压缩文件信息的操作方法
关闭文件
zf.close()
获取压缩文件信息
zf.infolist()
#返回压缩文件下成员文件的信息列表,包括filename、compress_type、external_attr、file_size、compress_size等信息
获取压缩文件的成员文件名称
zf.namelist()
#返回['read.csv', 'write.csv']
获取压缩文件下某个名为name的信息
zf.getinfo('read.csv')
#返回
external_attr=0x20 file_size=35 compress_size=36>
打印出压缩文件目录信息表
zf.printdir()
#返回如下信息表:
File Name |
Modified |
Size |
read.csv |
2020-10-10 14:50:40 |
35 |
write.csv |
2020-10-12 15:34:08 |
45 |
(3)压缩子文件的操作方法
打开压缩文件下的某个文件
read_file=zf.open('read.csv',mode='r',pwd=None)
print(read_file)
#返回b'1,2,3,4,5,\r\na,b,c,d,e,f\r\n!,@,#,,,\r\n'
#name可以是子文件名称,也可以是ZipInfo对象
如zf.open(zf.infolist()[0],mode='r',pwd=None)亦表示读取上述文件
#当mode为’r’时,读取文件可以采用 read(), readline(), readlines(), seek(), tell(), __iter__(), __next__()方法,当为’w’时,写入文件可以采用write()方法
#pwd是解密加密文件时的密码
#注:返回的是二进制数据
提取某个子文件到指定工作目录
zf.extract('write.csv',path=r'D:\工作\算法',pwd=None)
#返回创建的标准路径名’D:\工作\算法\write.csv’,并在指定路径path下生成指定的文件write.csv
#member参数既可以是文件名,也可以是ZipInfo对象,如zf.infolist()[1]
提取某些子文件到指定工作目录
zf.extractall(path=r'D:\工作\算法',members=zf.namelist(),pwd=None)
#将在目录'D:\工作\算法'下生成read.csv和write.csv文件
#members只能是子文件名称的子集
#pwd是加密文件的密码
为提取的加密文件设置密码
zf.setpassword(pwd)
读取某个子文件
zf.read('read.csv',pwd=None)
#返回b'1,2,3,4,5,\r\na,b,c,d,e,f\r\n!,@,#,,,\r\n'
#name可以是子文件名称,也可以是ZipInfo对象
#压缩文件应该以’r’或者’a’的方式打开
#注:读取的是二进制数据
压缩文件的校验
zf.testzip()
#对所有文件进行循环冗余校验并检查文件头,返回第一个错误的文件名,如果没有则返回None
向某个压缩文件写入某个文件
ZipFile.write(filename, arcname=None, compress_type=None, compresslevel=None)
#arcname为压缩文档名,文档必须以'w', 'x'或'a'的模式打开
向某个压缩文件的某个文件写入字符
ZipFile.writestr(zinfo_or_arcname, data, compress_type=None, compresslevel=None)
#zinfo_or_arcname为文件名称或者zipinfo对象,data为待写入的字符串或者字节,文档必须以'w', 'x'或'a'的模式打开
(4)相关属性
压缩文件的名称
zf.filename
#返回’E:\my_project\zipfile_sample.zip’
压缩文件调试
zf.debug
#返回0(默认,无输出)到3之间的数
压缩文件的注释
zf.comment
#返回字节信息
5、Path类
(1)创建path对象
path=zipfile.Path(root='E:\my_project\zipfile_sample.zip',at='read.csv')
#root为zip压缩文件的根路径
#at为压缩文件子文件的定位
(2)属性
最后路径名称
path.name
#返回'read.csv'
(3)方法
打开指定路径文件
path.open(mode=’r’)
#返回
#mode可以包含’r’,’w’,’rb’,’wb’
#python3.9增加支持文本和二进制模式,默认模式为文本
列举出当前路径的子路径
path_r=zipfile.Path('E:\my_project\zipfile_sample.zip')
list(path_r.iterdir())
#返回:
[Path('E:\\my_project\\zipfile_sample.zip', 'read.csv'),
Path('E:\\my_project\\zipfile_sample.zip', 'write.csv')]
当前路径是否为目录
path_r.is_dir()
#返回True
当前路径是否为文件
path.is_file()
#返回True
当前路径是否存在
path.exists()
#返回True
读取当前文件为unicode字符串
path.read_text()
#返回'1,2,3,4,5,\na,b,c,d,e,f\n!,@,#,,,\n'
读取当前文件为bytes
path.read_bytes()
#返回b'1,2,3,4,5,\na,b,c,d,e,f\n!,@,#,,,\n'
6、ZipInfo类
ZipInfo类的实例是通过ZipFile对象的getinfo和infolist方法得到的,每个实例存储zip文档子文件的信息。
(1)方法
类方法
ZipInfo.from_file(filename,arcname=None,strict_timestamps=True)
#filename为文件系统上的文件或目录的路径字符串
#arcname为压缩文档名,如果没有设置将与filename一致
实例方法
当前zipinfo是否为压缩目录
zpif=zf.infolist()[0]
zpif.is_dir()
#返回False
(2)属性
文件名称
zpif.filename
#返回read.csv
最后修改时间
zpif.date_time
#返回(2020, 10, 10, 14, 50, 40)
#分别为年月日时分秒
压缩类型
zpif.compress_type
#返回8
子文件二进制注释
zpif.comment
#返回b''
内部结构的二进制注释
zpif.extra
#返回:
b'\n\x00\x00\x00\x00\x00\x00\x01\x00\x18\x00\x94B\x9c\xab\xd1\x9e\xd6\x01\xf1\n\x9b\xab\xd1\x9e\xd6\x01\xa3{\x14\xd6\x08\x9e\xd6\x01'
创建zip压缩文件的系统
zpif.create_system
#返回0
创建zip压缩文件的版本
zpif.create_version
#返回31
抽取压缩文档的版本
zpif.extract_version
#返回20
是否保留
zpif.reserved
#必须为0
zip标志位
zpif.flag_bits
文件头容量
zpif.volume
内部属性
zpif.internal_attr
外部属性
zpif.external_attr
文件头的偏移字节
zpif.header_offset
循环冗余校验码
zpif.CRC
压缩大小
zpif.compress_size
未压缩文件的大小
zpif.file_size
(完)
欢迎关注【lambda派】!
相关阅读:
术业有专攻:I/O流操作模块io
术业有专攻:逗号分割文件csv
术业有专攻:高阶函数模块functools
术业有专攻:数学计算模块math
术业有专攻:枚举类型enum模块
supersu-v2.8.2.zip_术业有专攻:ZIP文件操作模块zipfile相关推荐
- c++ 写入文件_术业有专攻:逗号分割文件csv
本文约2700字,建议阅读时间13~18分钟 关键字:python,逗号分隔文件,字符分割,csv 逗号分隔文件是电子表格和数据库的常用输入与输出格式. 1.相关函数 (1)csv格式数据读取 rea ...
- “术业有专攻”和“功夫在行外”--笑来
吾阅:因为他们除了弹琴不干别的--不读书.不读诗.不观察.不记录,不看电影.不吃喝玩乐,甚至不与人沟通--他们太刻苦,他们太专注于那唯一的领域.这些人不是没有天分,也不是不努力,但是他们用他们的行动把 ...
- 术业有专攻·蛛网时代的BI“野心”
所谓术业有专攻,身为一家专业从事BI开发的公司,蛛网时代对自身的发展和专业度一直有着信心. 最近,有很多客户在咨询产品的时候,一直在问一个问题,蛛网系统和云蛛系统有什么不同呢?小编今天就来为大家解答一 ...
- 闻道有先后术业有专攻(师说)
闻道有先后术业有专攻 知道道理有先有后,技能学业各有专门研究. 也可以说人与人之间不能以年龄的大小来评判学识的高低,只要这个人有你所不会的学问,那么他就可以成为你的老师
- 计算机设备灯光有哪些,电脑桌面灯光选购有讲究,术业有专攻,明基ScreenBar Plus屏幕智能挂灯使用体验...
电脑桌面灯光选购有讲究,术业有专攻,明基ScreenBar Plus屏幕智能挂灯使用体验 2020-02-10 23:00:00 32点赞 57收藏 63评论 Hi,大家吼,我mars208又来了~~ ...
- 设计类计算机主机要求,术业有专攻,设计师就该配台专业点的电脑
作为设计师,日常工作需要用到的软件有很多,如CAD.Photoshop.3DMax等,这些软件通常对电脑的性能都有一定的要求,所以在配置稍弱的电脑进行办公,设计师往往会遇到渲染慢,素材导入慢,多素材运 ...
- (九)巴菲特与索罗斯的投资习惯:术业有专攻
作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai (一)巴菲特与索罗斯的投资习惯:思考习惯的力量 (二)巴菲特与索罗斯的投资习惯:七种致命的投资信念 (三 ...
- 软件外包故事 - 术业有专攻
最近跟朋友聊天,发现有挺多人不大了解软件外包,最近的面试也遇到了谈外包色变的情况,似乎都带着有色眼镜去看待软件外包公司 ,我想以一个从业欧美外包五年多的程序员角色,通过几篇短文来带大家认识一下我们的工 ...
- 测试小故事6:术业有专攻
一次同几位测试同行聊天,讲起一件有趣的事情. 测试人员提交了系统UI和可用性的BUG,一位开发人员不愿意了,大发脾气,对着开发给出了一通抱怨. 1. 这些不是系统的BUG,即使是BUG也是无关 ...
最新文章
- 多项式回归、分位数回归(Quantile Regression)、保序回归(Isotonic Regression)、RANSAC回归、核岭回归、基准回归模型(baseline)
- ssh中c3p0连接mysql_JSP+SSH+Mysql+C3P0实现的传智播客网上商城
- ovs-ofctl: s1 is not a bridge or a socket 解决方法
- python编程电子书下载-python编程初学者指南
- Jenkins加Shell实现最简单的持续部署
- 分享12306抢票心得-终极秒杀思路篇
- python多线程模块_python 多线程模块参考
- 走向REST:将Tomcat与Spring和JAX-RS嵌入(Apache CXF)
- C# 篇基础知识10——多线程
- wsdl2java生成客户端代码_利用wsdl2java工具生成webservice的客户端代码
- 计算点到SVM超平面的距离
- (附源码)计算机毕业设计ssm 航空订票系统
- iOS常用的几种锁详解以及用法
- qq等级查询php源码,基于PHP的QQ等级计算器
- 颠覆性创始人Tony Delgado在波多黎各启动编码训练营
- icem密度盒怎么设置_使用ICEM绘制非结构网格时,如何提高网格质量?
- 频域法分析系统详解及个人笔记
- 用自己的路由器建立自己的服务器之创建网页
- js jQuery方法join()
- 自学python怎么找工作-我是如何在自学编程9个月后找到工作的
热门文章
- 无法建立与远程计算机连接,解决“不能建立到远程计算机的连接,因此用于此...”的方法_常见问题解析...
- JavaWeb是什么?如何学习JavaWeb的体系
- ug曲面建模实例教程计算机,UG曲面造型实例-直接建模
- 《数据结构》XB专场(完)模块的引用与裁剪
- 免杀技术有一套(免杀方法大集结)(Anti-AntiVirus)
- Windows下基础免杀技术
- 【微信小程序——云音乐播放器】
- 怎么在短时间内快速提高网站排名
- 激活函数(阶跃,sigmoid,relu,恒等,softmax)
- 图的最短路径问题(C++)