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装饰器使用的一些建议
Jun 03 Python
python获取元素在数组中索引号的方法
Jul 15 Python
基于python的Tkinter编写登陆注册界面
Jun 30 Python
对python程序内存泄漏调试的记录
Jun 11 Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 Python
Python中按键来获取指定的值
Mar 02 Python
python内存管理机制原理详解
Aug 12 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
python实现最短路径的实例方法
Jul 19 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 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
php模板中出现空行解决方法
2011/03/08 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
Python3里的super()和__class__使用介绍
2015/04/23 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
python根据时间获取周数代码实例
2019/09/30 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
python 简单的调用有道翻译
2020/11/25 Python
公司道歉信范文
2014/01/09 职场文书
安全检查验收制度
2014/01/12 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
会计工作能力自我评价
2015/03/05 职场文书
开学第一天的感想
2015/08/10 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书
Oracle锁表解决方法的详细记录
2022/06/05 Oracle
java中如何截取字符串最后一位
2022/07/07 Java/Android
python语言中pandas字符串分割str.split()函数
2022/08/05 Python