Python中的zipfile模块使用详解


Posted in Python onJune 25, 2015

zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操作zip文件,下面具体介绍一下:
class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])

创建一个ZipFile对象,表示一个zip文件。参数file表示文件的路径或类文件对象(file-like object);参数mode指示打开zip文件的模式,默认值为'r',表示读已经存在的zip文件,也可以为'w'或'a','w'表示新建一个zip文档或覆盖一个已经存在的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为解压密码。下面一个例子将保存在程序根目录下的txt.zip内的所有文件解压到D:/Work目录:
 

import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
for file in zipFile.namelist():
  zipFile.extract(file, r'd:/Work')
zipFile.close()
ZipFile.extractall([path[, members[, pwd]]])

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

将zip文档内的信息打印到控制台上。
ZipFile.setpassword(pwd)

设置zip文档的密码。
ZipFile.read(name[, pwd])

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

#coding=gbk
import zipfile, os
zipFile = zipfile.ZipFile(os.path.join(os.getcwd(), 'txt.zip'))
data = zipFile.read('txt.txt')
(lambda f, d: (f.write(d), f.close()))(open(r'd:/txt.txt', 'wb'), data) 
#一行语句就完成了写文件操作。仔细琢磨哦~_~
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', 'ok.doc', zipfile.ZIP_DEFLATED)
zipFile.close()
ZipFile.writestr(zinfo_or_arcname, bytes)

writestr()支持将二进制数据直接写入到压缩文档。
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(), 'txt.zip'))
zipInfo = zipFile.getinfo('doc.doc')
print 'filename:', zipInfo.filename
print 'date_time:', zipInfo.date_time
print 'compress_type:', zipInfo.compress_type
print 'comment:', zipInfo.comment
print 'extra:', zipInfo.extra
print 'create_system:', zipInfo.create_system
print 'create_version:', zipInfo.create_version
print 'extract_version:', zipInfo.extract_version
print 'extract_version:', zipInfo.reserved
print 'flag_bits:', zipInfo.flag_bits
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
print 'compress_size:', zipInfo.compress_size
print 'file_size:', zipInfo.file_size
zipFile.close()

感觉使用zipfile模块来处理zip文件真的很简单。想当初在.NET平台下,使用sharpziplib压缩、解压一个文件,我花了N多时间,找了N多英文资源,才写出一个能压缩文件的demo。而现在使用Python,通过阅读python手册,一两个小时就掌握了zipfile模块的基本使用。哈哈,使用Python,真爽!

Python 相关文章推荐
自己编程中遇到的Python错误和解决方法汇总整理
Jun 03 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
Apr 19 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
Python3.6日志Logging模块简单用法示例
Jun 14 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
对Python+opencv将图片生成视频的实例详解
Jan 08 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 Python
Python OpenCV快速入门教程
Apr 17 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 Python
Python实现保证只能运行一个脚本实例
Jun 24 #Python
Python中的默认参数详解
Jun 24 #Python
Python中的下划线详解
Jun 24 #Python
Python装饰器使用实例:验证参数合法性
Jun 24 #Python
Python线程详解
Jun 24 #Python
Python函数式编程指南(四):生成器详解
Jun 24 #Python
Python函数式编程指南(三):迭代器详解
Jun 24 #Python
You might like
Linux下PHP连接Oracle数据库
2014/08/20 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
yii添删改查实例
2015/11/16 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
js的with语句使用方法
2007/09/21 Javascript
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
js实现录音上传功能
2019/11/22 Javascript
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
公司员工体检通知
2015/04/21 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
电影地道战观后感
2015/06/04 职场文书
开学典礼致辞
2015/07/29 职场文书
周一给客户的问候语
2015/11/10 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python