Python ZipFile模块详解


Posted in Python onNovember 01, 2013

Python zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了。ZipFile是主要的类,用来创建和读取zip文件而ZipInfo是存储的zip文件的每个文件的信息的。
比如要读取一个Python 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的列表。一个ZipInfo对象中包含了压缩包内一个文件的信息,其中比较常用的是 filename, file_size, header_offset, 分别为文件名,文件大小,文件数据在压缩包中的偏移。其实之前的z.namelist()就是读取的ZipInfo中的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怎么办呢?其实这个就是Python ZipFile模块的write方法中第二个参数的作用了。只需要这样调用:
z.write("test/111.txt", "test22/111.txt") 

以上就是我们为大家介绍的有关Python ZipFile模块的相关知识。
Python 相关文章推荐
python中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
Python中scatter函数参数及用法详解
Nov 08 Python
Python处理CSV与List的转换方法
Apr 19 Python
使用python爬取B站千万级数据
Jun 08 Python
python 多线程将大文件分开下载后在合并的实例
Nov 09 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
Python SELENIUM上传文件或图片实现过程
Oct 28 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
python链表类中获取元素实例方法
Feb 23 Python
python百行代码实现汉服圈图片爬取
Nov 23 Python
python标准日志模块logging的使用方法
Nov 01 #Python
python类定义的讲解
Nov 01 #Python
用实例说明python的*args和**kwargs用法
Nov 01 #Python
python操作MongoDB基础知识
Nov 01 #Python
python操作MySQL数据库具体方法
Oct 28 #Python
Python sys.path详细介绍
Oct 17 #Python
python开发的小球完全弹性碰撞游戏代码
Oct 15 #Python
You might like
多人战的战术与战略
2020/03/04 星际争霸
php过滤XSS攻击的函数
2013/11/12 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
微信自定义分享php代码分析
2016/11/24 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
基于Jquery的温度计动画效果
2010/06/18 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
用Python实现命令行闹钟脚本实例
2016/09/05 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
使用Python实现分别输出每个数组
2019/12/06 Python
python super用法及原理详解
2020/01/20 Python
python em算法的实现
2020/10/03 Python
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
翻译专业应届生求职信
2013/11/23 职场文书
运动会的口号
2014/06/09 职场文书
高中军训的心得体会
2014/09/01 职场文书
义卖募捐活动总结
2015/05/09 职场文书
员工福利申请报告
2015/05/15 职场文书
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS