Python模块zipfile原理及使用方法详解


Posted in Python onAugust 04, 2020

zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的

zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了。

ZipFile是主要的类,用来创建和读取zip文件

ZipInfo是存储的zip文件的每个文件的信息的。

比如要读取一个zipfile,这里假设filename是一个文件的路径:

import zipfile
z = zipfile.ZipFile(filename, 'r') # 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件
for f in z.namelist():
  print f

上面的代码是读取一个zip压缩包里所有文件的名字。z.namelist() 会返回压缩包内所有文件名的列表。

再看看下面一个:

import zipfile
z = zipfile.ZipFile(filename, 'r')
for i in z.infolist():
  print i.file_size, i.header_offset

这里使用了z.infolist(), 它返回的就是压缩包内所有文件的信息,就是一个ZipInfo的列表。一个ZopInfo对象中包含了压缩包内一个文件的信息,其中比较常用的是 filename, file_size, header_offset, 分别为文件名,文件大小,文件数据在压缩包中的偏移。其实之前的z.namelist()就是读取的ZopInfo中的filename,组成一个 list返回的。

从压缩包里解压缩出一个文件的方法是使用ZipFile的read方法:

import zipfile
z = zipfile.ZipFile(filename, 'r')
print z.read(z.namelist()[0])

这样就读取出z.namelist()中的第一个文件,并且输出到屏幕,当然也可以把它存储到文件。

下面是创建zip压缩包的方法:

与读取的方法其实很类似的:

import zipfile, os

z = zipfile.ZipFile(filename, 'w') # 注意这里的第二个参数是w,这里的filename是压缩包的名字

#假设要把一个叫testdir中的文件全部添加到压缩包里(这里只添加一级子目录中的文件):
if os.path.isdir(testdir):
  for d in os.listdir(testdir):
    z.write(testdir+os.sep+d)
# close() 是必须调用的!
z.close()

上面的代码非常的简单。

想想还有一个问题,如果我把一个test/111.txt 添加到压缩包里之后我希望在包里它放到test22/111.txt怎么办呢?

其实这个就是ZipFile的write方法中第二个参数的作用了。只需要这样调用:z.write("test/111.txt", "test22/111.txt")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python在windows和linux下获得本机本地ip地址方法小结
Mar 20 Python
Python的Django框架中自定义模版标签的示例
Jul 20 Python
python操作mysql数据库
Mar 05 Python
浅析Python装饰器以及装饰器模式
May 28 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
100行Python代码实现每天不同时间段定时给女友发消息
Sep 27 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
tensorflow求导和梯度计算实例
Jan 23 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 Python
使用django自带的user做外键的方法
Nov 30 Python
Django路由层如何获取正确的url
Jul 15 Python
python字典进行运算原理及实例分享
Aug 02 Python
Python爬虫之Spider类用法简单介绍
Aug 04 #Python
Python绘图之二维图与三维图详解
Aug 04 #Python
Python连接Impala实现步骤解析
Aug 04 #Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
Aug 04 #Python
Python如何给函数库增加日志功能
Aug 04 #Python
pycharm导入源码的具体步骤
Aug 04 #Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 #Python
You might like
php列出一个目录下的所有文件的代码
2012/10/09 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
详解PHP中的PDO类
2015/07/06 PHP
thinkphp3.2实现上传图片的控制器方法
2016/04/28 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
jquery 插件学习(二)
2012/08/06 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
JS canvas实现画板和签字板功能
2021/02/23 Javascript
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
Python异常处理操作实例详解
2018/08/28 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
python编写微信公众号首图思路详解
2019/12/13 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
简述 Python 的类和对象
2020/08/21 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
新闻人物通讯稿
2014/10/09 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
学校德育工作总结2015
2015/05/11 职场文书
python小程序之飘落的银杏
2021/04/17 Python
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android