Python模块zipfile原理及使用方法详解


Posted in Python onAugust 04, 2020

zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的

zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了。

ZipFile是主要的类,用来创建和读取zip文件

ZipInfo是存储的zip文件的每个文件的信息的。

比如要读取一个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的列表。一个ZopInfo对象中包含了压缩包内一个文件的信息,其中比较常用的是 filename, file_size, header_offset, 分别为文件名,文件大小,文件数据在压缩包中的偏移。其实之前的z.namelist()就是读取的ZopInfo中的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怎么办呢?

其实这个就是ZipFile的write方法中第二个参数的作用了。只需要这样调用:z.write("test/111.txt", "test22/111.txt")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
python+pyqt实现右下角弹出框
Oct 26 Python
TensorFLow用Saver保存和恢复变量
Mar 10 Python
django 控制页面跳转的例子
Aug 06 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
python selenium登录豆瓣网过程解析
Aug 10 Python
python 协程 gevent原理与用法分析
Nov 22 Python
Python库skimage绘制二值图像代码实例
Apr 10 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
Aug 04 Python
Python Django项目和应用的创建详解
Nov 27 Python
python函数的两种嵌套方法使用
Apr 02 Python
Python爬虫之Spider类用法简单介绍
Aug 04 #Python
Python绘图之二维图与三维图详解
Aug 04 #Python
Python连接Impala实现步骤解析
Aug 04 #Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
Aug 04 #Python
Python如何给函数库增加日志功能
Aug 04 #Python
pycharm导入源码的具体步骤
Aug 04 #Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 #Python
You might like
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
JS实现图片切换效果
2018/11/17 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
python 数据加密代码
2008/12/24 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
Django添加sitemap的方法示例
2018/08/06 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
Python 占位符的使用方法详解
2019/07/10 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
Python实现AI换脸功能
2020/04/10 Python
python switch 实现多分支选择功能
2020/12/21 Python
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
年度考核自我鉴定
2013/11/09 职场文书
优秀教师事迹简介
2014/02/02 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
付款委托书范本
2014/10/05 职场文书
个人欠条范本
2015/07/03 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
导游词之日月潭
2019/11/05 职场文书
科普 | 业余无线电知识-波段篇
2022/02/18 无线电