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使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
Python3 正在毁灭 Python的原因分析
Nov 28 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 Python
用Python写王者荣耀刷金币脚本
Dec 21 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 Python
Python 实现域名解析为ip的方法
Feb 14 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
Python OrderedDict的使用案例解析
Oct 25 Python
Python3 中sorted() 函数的用法
Mar 24 Python
Python中实现输入一个整数的案例
May 03 Python
Python中相见恨晚的技巧
Apr 13 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 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 select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
php中var_export与var_dump的区别分析
2010/08/21 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
Augularjs-起步详解
2016/07/08 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
PyQt5打开文件对话框QFileDialog实例代码
2018/02/07 Python
python进行TCP端口扫描的实现
2018/12/21 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
python实现图片九宫格分割
2021/03/07 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
python如何调用java类
2020/07/05 Python
Python pymsql模块的使用
2020/09/07 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
电子信息毕业生自荐信
2013/11/16 职场文书
销售顾问岗位职责
2014/02/25 职场文书
《夸父追日》教学反思
2014/02/26 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书