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文件特定行插入和替换实例详解
Jul 12 Python
python 数据的清理行为实例详解
Jul 12 Python
python下载图片实现方法(超简单)
Jul 21 Python
pyhton列表转换为数组的实例
Apr 04 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
Apr 11 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
Feb 07 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
pycharm配置QtDesigner的超详细方法
Jan 25 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 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 图片上传代码
2011/09/13 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
Node.js 实现抢票小工具 & 短信通知提醒功能
2019/10/22 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
python线程信号量semaphore使用解析
2019/11/30 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
长青弘远的面试题
2012/06/09 面试题
活动总结范文
2014/08/30 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
网络妈妈观后感
2015/06/08 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书