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实现给字典添加条目的方法
Sep 25 Python
全面理解Python中self的用法
Jun 04 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
python实现控制台打印的方法
Jan 12 Python
Python 私有化操作实例分析
Nov 21 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
Python内置异常类型全面汇总
May 28 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 Python
python实战之用emoji表情生成文字
May 08 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
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
PHP文件操作详解
2016/12/30 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
JS实现页面超时后自动跳转到登陆页面
2015/01/19 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
React复制到剪贴板的示例代码
2017/08/22 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
深入解析Python中的集合类型操作符
2015/08/19 Python
浅谈Python中函数的参数传递
2016/06/21 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
用Python解决x的n次方问题
2019/02/08 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
python实现同一局域网下传输图片
2020/03/20 Python
如何解决python多种版本冲突问题
2020/10/13 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
介绍下java.util.Arrays类
2012/10/16 面试题
即将毕业大学生自荐信
2014/01/24 职场文书
会计学专业学生的求职信范文
2014/01/27 职场文书
个人求职信范文分享
2014/01/31 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书