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中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
浅谈Python中带_的变量或函数命名
Dec 04 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
python 读取文件并把矩阵转成numpy的两种方法
Feb 12 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
python dataframe NaN处理方式
Dec 26 Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 Python
python脚本第一行如何写
Aug 30 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 Python
Python3+Flask安装使用教程详解
Feb 16 Python
python xlwt模块的使用解析
Apr 13 Python
python playwright 自动等待和断言详解
Nov 27 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
phpMyadmin 用户权限中英对照
2010/04/02 PHP
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
PHP执行系统命令函数实例讲解
2021/03/03 PHP
jQuery使用手册之 事件处理
2007/03/24 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
超市营业员岗位职责
2013/12/20 职场文书
日本语毕业生自荐信
2014/02/01 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
2014年外联部工作总结
2014/11/17 职场文书
2015年简历自我评价范文
2015/03/11 职场文书