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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
Python实现求一个集合所有子集的示例
May 04 Python
Django实现表单验证
Sep 08 Python
对pandas处理json数据的方法详解
Feb 08 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 Python
python函数不定长参数使用方法解析
Dec 14 Python
python psutil监控进程实例
Dec 17 Python
python初步实现word2vec操作
Jun 09 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
python处理写入数据代码讲解
Oct 22 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生成随机数或者字符串的代码
2008/09/05 PHP
php将html转为图片的实现方法
2017/05/19 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
华润集团网上药店:健一网
2016/09/19 全球购物
JAVA程序员面试题
2012/10/03 面试题
高校教师自荐信范文
2014/03/13 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
在职员工证明书
2014/09/19 职场文书
深入理解pytorch库的dockerfile
2022/06/10 Python