本文约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相关推荐

  1. c++ 写入文件_术业有专攻:逗号分割文件csv

    本文约2700字,建议阅读时间13~18分钟 关键字:python,逗号分隔文件,字符分割,csv 逗号分隔文件是电子表格和数据库的常用输入与输出格式. 1.相关函数 (1)csv格式数据读取 rea ...

  2. “术业有专攻”和“功夫在行外”--笑来

    吾阅:因为他们除了弹琴不干别的--不读书.不读诗.不观察.不记录,不看电影.不吃喝玩乐,甚至不与人沟通--他们太刻苦,他们太专注于那唯一的领域.这些人不是没有天分,也不是不努力,但是他们用他们的行动把 ...

  3. 术业有专攻·蛛网时代的BI“野心”

    所谓术业有专攻,身为一家专业从事BI开发的公司,蛛网时代对自身的发展和专业度一直有着信心. 最近,有很多客户在咨询产品的时候,一直在问一个问题,蛛网系统和云蛛系统有什么不同呢?小编今天就来为大家解答一 ...

  4. 闻道有先后术业有专攻(师说)

    闻道有先后术业有专攻 知道道理有先有后,技能学业各有专门研究. 也可以说人与人之间不能以年龄的大小来评判学识的高低,只要这个人有你所不会的学问,那么他就可以成为你的老师

  5. 计算机设备灯光有哪些,电脑桌面灯光选购有讲究,术业有专攻,明基ScreenBar Plus屏幕智能挂灯使用体验...

    电脑桌面灯光选购有讲究,术业有专攻,明基ScreenBar Plus屏幕智能挂灯使用体验 2020-02-10 23:00:00 32点赞 57收藏 63评论 Hi,大家吼,我mars208又来了~~ ...

  6. 设计类计算机主机要求,术业有专攻,设计师就该配台专业点的电脑

    作为设计师,日常工作需要用到的软件有很多,如CAD.Photoshop.3DMax等,这些软件通常对电脑的性能都有一定的要求,所以在配置稍弱的电脑进行办公,设计师往往会遇到渲染慢,素材导入慢,多素材运 ...

  7. (九)巴菲特与索罗斯的投资习惯:术业有专攻

    作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai (一)巴菲特与索罗斯的投资习惯:思考习惯的力量 (二)巴菲特与索罗斯的投资习惯:七种致命的投资信念 (三 ...

  8. 软件外包故事 - 术业有专攻

    最近跟朋友聊天,发现有挺多人不大了解软件外包,最近的面试也遇到了谈外包色变的情况,似乎都带着有色眼镜去看待软件外包公司 ,我想以一个从业欧美外包五年多的程序员角色,通过几篇短文来带大家认识一下我们的工 ...

  9. 测试小故事6:术业有专攻

    一次同几位测试同行聊天,讲起一件有趣的事情. 测试人员提交了系统UI和可用性的BUG,一位开发人员不愿意了,大发脾气,对着开发给出了一通抱怨.     1. 这些不是系统的BUG,即使是BUG也是无关 ...

最新文章

  1. 多项式回归、分位数回归(Quantile Regression)、保序回归(Isotonic Regression)、RANSAC回归、核岭回归、基准回归模型(baseline)
  2. ssh中c3p0连接mysql_JSP+SSH+Mysql+C3P0实现的传智播客网上商城
  3. ovs-ofctl: s1 is not a bridge or a socket 解决方法
  4. python编程电子书下载-python编程初学者指南
  5. Jenkins加Shell实现最简单的持续部署
  6. 分享12306抢票心得-终极秒杀思路篇
  7. python多线程模块_python 多线程模块参考
  8. 走向REST:将Tomcat与Spring和JAX-RS嵌入(Apache CXF)
  9. C# 篇基础知识10——多线程
  10. wsdl2java生成客户端代码_利用wsdl2java工具生成webservice的客户端代码
  11. 计算点到SVM超平面的距离
  12. (附源码)计算机毕业设计ssm 航空订票系统
  13. iOS常用的几种锁详解以及用法
  14. qq等级查询php源码,基于PHP的QQ等级计算器
  15. 颠覆性创始人Tony Delgado在波多黎各启动编码训练营
  16. icem密度盒怎么设置_使用ICEM绘制非结构网格时,如何提高网格质量?
  17. 频域法分析系统详解及个人笔记
  18. 用自己的路由器建立自己的服务器之创建网页
  19. js jQuery方法join()
  20. 自学python怎么找工作-我是如何在自学编程9个月后找到工作的

热门文章

  1. 无法建立与远程计算机连接,解决“不能建立到远程计算机的连接,因此用于此...”的方法_常见问题解析...
  2. JavaWeb是什么?如何学习JavaWeb的体系
  3. ug曲面建模实例教程计算机,UG曲面造型实例-直接建模
  4. 《数据结构》XB专场(完)模块的引用与裁剪
  5. 免杀技术有一套(免杀方法大集结)(Anti-AntiVirus)
  6. Windows下基础免杀技术
  7. 【微信小程序——云音乐播放器】
  8. 怎么在短时间内快速提高网站排名
  9. 激活函数(阶跃,sigmoid,relu,恒等,softmax)
  10. 图的最短路径问题(C++)