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 14 Python
Python3读取文件常用方法实例分析
May 22 Python
Python 使用with上下文实现计时功能
Mar 09 Python
python 保存float类型的小数的位数方法
Oct 17 Python
Python传递参数的多种方式(小结)
Sep 18 Python
详解Django将秒转换为xx天xx时xx分
Sep 27 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
Pytorch上下采样函数--interpolate用法
Jul 07 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 Python
python中函数返回多个结果的实例方法
Dec 16 Python
Python使用tkinter实现小时钟效果
Feb 22 Python
pytorch 实现在测试的时候启用dropout
May 27 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
解析php中如何调用用户自定义函数
2013/08/06 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
Python中__new__与__init__方法的区别详解
2015/05/04 Python
Python编程实现正则删除命令功能
2017/08/30 Python
python实现k-means聚类算法
2018/02/23 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
用python对oracle进行简单性能测试
2020/12/05 Python
临床医学系毕业生推荐信
2013/11/09 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
社区好人好事材料
2014/12/26 职场文书
自我评价优缺点范文
2015/03/11 职场文书
青年志愿者活动感想
2015/08/07 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
话题作文之自信作文
2019/11/15 职场文书
Redis三种集群模式详解
2021/10/05 Redis