详解python3中zipfile模块用法


Posted in Python onJune 18, 2018

一、zipfile模块的简述

zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的,

在这里对zipfile的使用方法做一些记录。即方便自己也方便别人。

zipfile里有两个非常常用的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了。

ZipFile是主要的类,用来创建和读取zip文件而ZipInfo是存储的zip文件的每个文件的信息的。

下面我们就来介绍这两个类的基本操作:

二、ZipFile和Zipinfo这两个类的基本操作

1、class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])

创建一个ZipFile对象,表示一个zip文件。参数file表示文件的路径或类文件对象(file-like object);参数mode指示打开zip文件的模式,

默认值为'r',表示读已经存在的zip文件,也可以为'w'或'a','w'表示新建一个zip文档或覆盖一个已经存在的zip文档,

import zipfile
f = zipfile.ZipFile(filename, 'r') # 这里的第二个参数用r表示是读取zip文件,w或a是创建一个zip文件

for f_name in f.namelist(): #z.namelist() 会返回压缩包内所有文件名的列表。
 print(f_name)
#上面的代码是读取一个zip压缩包里所有文件的名字。

'a'表示将数据附加到一个现存的zip文档中。参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。

ZipFile还提供了如下常用的方法和属性:

ZipFile.getinfo(name)

获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。

ZipFile.infolist()

获取zip文档内所有文件的信息,返回一个zipfile.ZipInfo的列表。

ZipFile.namelist()

获取zip文档内所有文件的名称列表。

ZipFile.extract(member[, path[, pwd]])

将zip文档内的指定文件解压到当前目录。参数member指定要解压的文件名称或对应的ZipInfo对象;参数path指定了解析文件保存的文件夹;

参数pwd为解压密码。下面一个例子将保存在程序根目录下的duoduo.zip内的所有文件解压到D:/Work目录:

import zipfile, os
f = zipfile.ZipFile(os.path.join(os.getcwd(), 'duoduo.zip')) #拼接成一个路径
for file in f.namelist():
f.extract(file, r'd:/Work')  #在d:/Work中解压文件
f.close()

详解python3中zipfile模块用法

上面是os.getcwd的用法!!

ZipFile.extractall([path[, members[, pwd]]])

解压zip文档中的所有文件到当前目录。参数members的默认值为zip文档内的所有文件名称列表,也可以自己设置,选择要解压的文件名称。

ZipFile.printdir()

将zip文档内的信息打印到控制台上。

ZipFile.setpassword(pwd)

设置zip文档的密码。

ZipFile.read(name[, pwd])

获取zip文档内指定文件的二进制数据。下面的例子演示了read()的使用,zip文档内包括一个duoduo.txt的文本文件,使用read()方法读取其二进制数据,然后保存到D:/duoduo.txt。

import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'duoduo.zip'))
data = zipFile.read('duoduo.txt')
# (lambda f, d: (f.write(d), f.close()))(open(r'd:/duoduo.txt', 'wb'), data) #一行语句就完成了写文件操作。仔细琢磨哦~_~
with open(r'd:/duoduo.txt','wb') as f:
 for d in data:
  f.write(d)
zipFile.close()

ZipFile.write(filename[, arcname[, compress_type]])

将指定文件添加到zip文档中。filename为文件路径,arcname为添加到zip文档之后保存的名称, 参数compress_type表示压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。下面的例子演示了如何创建一个zip文档,并将文件D:/test.doc添加到压缩文档中。

import zipfile, os
zipFile = zipfile.ZipFile(r'D:/test.zip'), 'w')
zipFile.write(r'D:/test.doc', '保存的名字', zipfile.ZIP_DEFLATED)
zipFile.close()

ZipFile.writestr(zinfo_or_arcname, bytes)

writestr()支持将二进制数据直接写入到压缩文档。

2、Class ZipInfo

ZipFile.getinfo(name) 方法返回的是一个ZipInfo对象,表示zip文档中相应文件的信息。它支持如下属性:

ZipInfo.filename: 获取文件名称。
ZipInfo.date_time: 获取文件最后修改时间。返回一个包含6个元素的元组:(年, 月, 日, 时, 分, 秒)
ZipInfo.compress_type: 压缩类型。
ZipInfo.comment: 文档说明。
ZipInfo.extr: 扩展项数据。
ZipInfo.create_system: 获取创建该zip文档的系统。
ZipInfo.create_version: 获取 创建zip文档的PKZIP版本。
ZipInfo.extract_version: 获取 解压zip文档所需的PKZIP版本。
ZipInfo.reserved: 预留字段,当前实现总是返回0。
ZipInfo.flag_bits: zip标志位。
ZipInfo.volume: 文件头的卷标。
ZipInfo.internal_attr: 内部属性。
ZipInfo.external_attr: 外部属性。
ZipInfo.header_offset: 文件头偏移位。
ZipInfo.CRC: 未压缩文件的CRC-32。
ZipInfo.compress_size: 获取压缩后的大小。
ZipInfo.file_size: 获取未压缩的文件大小。

下面一个简单的例子说明这些属性的意思:

import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'duoduo.zip'))
zipInfo = zipFile.getinfo('文件中的文件.txt')
print ('filename:', zipInfo.filename) #获取文件名称
print ('date_time:', zipInfo.date_time) #获取文件最后修改时间。返回一个包含6个元素的元组:(年, 月, 日, 时, 分, 秒)
print ('compress_type:', zipInfo.compress_type) #压缩类型
print ('comment:', zipInfo.comment) #文档说明
print ('extra:', zipInfo.extra) #扩展项数据
print ('create_system:', zipInfo.create_system) #获取创建该zip文档的系统。
print ('create_version:', zipInfo.create_version) #获取 创建zip文档的PKZIP版本。
print ('extract_version:', zipInfo.extract_version) #获取 解压zip文档所需的PKZIP版本。
print ('extract_version:', zipInfo.reserved) # 预留字段,当前实现总是返回0。
print ('flag_bits:', zipInfo.flag_bits) #zip标志位。
print ('volume:', zipInfo.volume) # 文件头的卷标。
print ('internal_attr:', zipInfo.internal_attr) #内部属性。
print ('external_attr:', zipInfo.external_attr) #外部属性。
print ('header_offset:', zipInfo.header_offset) # 文件头偏移位。
print ('CRC:', zipInfo.CRC) # 未压缩文件的CRC-32。
print ('compress_size:', zipInfo.compress_size) #获取压缩后的大小。
print ('file_size:', zipInfo.file_size) #获取未压缩的文件大小。
zipFile.close() #
Python 相关文章推荐
将图片文件嵌入到wxpython代码中的实现方法
Aug 11 Python
跟老齐学Python之让人欢喜让人忧的迭代
Oct 02 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
用python处理图片实现图像中的像素访问
May 04 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
pycharm创建一个python包方法图解
Apr 10 Python
python 整数越界问题详解
Jun 27 Python
Django用户认证系统 组与权限解析
Aug 02 Python
Tensorflow累加的实现案例
Feb 05 Python
服务器端jupyter notebook映射到本地浏览器的操作
Apr 14 Python
使用opencv中匹配点对的坐标提取方式
Jun 04 Python
基于python实现操作git过程代码解析
Jul 27 Python
python爬取个性签名的方法
Jun 17 #Python
Python爬虫包BeautifulSoup学习实例(五)
Jun 17 #Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 #Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 #Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 #Python
python主线程捕获子线程的方法
Jun 17 #Python
Python实现获取邮箱内容并解析的方法示例
Jun 16 #Python
You might like
如何对PHP程序中的常见漏洞进行攻击
2006/10/09 PHP
PHP 加密与解密的斗争
2009/04/17 PHP
php文档更新介绍
2011/07/22 PHP
php中apc缓存使用示例
2013/12/25 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
优秀学生自我鉴定范例
2013/12/18 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
yy结婚证婚词
2014/01/10 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
监察建议书范文
2014/03/12 职场文书
委托书格式范文
2015/01/28 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
企业安全生产检查制度
2015/08/06 职场文书
初中物理教学反思
2016/02/19 职场文书