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获取指定网页上所有超链接的方法
Apr 04 Python
Python爬虫DNS解析缓存方法实例分析
Jun 02 Python
对python中return和print的一些理解
Aug 18 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
详解js文件通过python访问数据库方法
Mar 03 Python
Python批量删除只保留最近几天table的代码实例
Apr 01 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
使用Python和Scribus创建一个RGB立方体的方法
Jul 17 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 Python
Django mysqlclient安装和使用详解
Sep 17 Python
python opencv通过4坐标剪裁图片
Jun 05 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
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
WHOIS类的修改版
2006/10/09 PHP
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
PHP中的extract的作用分析
2008/04/09 PHP
php检测文件编码的方法示例
2014/04/25 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
Prototype Function对象 学习
2009/07/12 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
详解从Vue-router到html5的pushState
2018/07/21 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
英国著名书店:Foyles
2018/12/01 全球购物
室内设计专业学生的自我评价分享
2013/11/27 职场文书
2014新课程改革心得体会
2014/03/10 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL