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实现单向链表详解
Feb 08 Python
Python读取properties配置文件操作示例
Mar 29 Python
python模拟表单提交登录图书馆
Apr 27 Python
pandas 选择某几列的方法
Jul 03 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
Linux下Python安装完成后使用pip命令的详细教程
Nov 22 Python
python 获取图片分辨率的方法
Jan 08 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
Jun 04 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
python名片管理系统开发
Jun 18 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 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 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
关于PHP实现异步操作的研究
2013/02/03 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
python和shell监控linux服务器的详细代码
2018/06/22 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
用Python解决x的n次方问题
2019/02/08 Python
Python中字符串List按照长度排序
2019/07/01 Python
python 随机森林算法及其优化详解
2019/07/11 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
python中time、datetime模块的使用
2020/12/14 Python
社会实践感言
2014/01/25 职场文书
学校节能减排倡议书
2014/05/16 职场文书
化工专业自荐书
2014/06/16 职场文书
法人委托书范本格式
2014/09/15 职场文书
vue实力踩坑之push当前页无效
2022/04/10 Vue.js