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函数的笔记整理
Apr 07 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
Apr 17 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
python图像处理之镜像实现方法
May 30 Python
vscode 远程调试python的方法
Dec 01 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
用Python解决x的n次方问题
Feb 08 Python
Django 全局的static和templates的使用详解
Jul 19 Python
Python中如何添加自定义模块
Jun 09 Python
Python datetime模块使用方法小结
Jun 18 Python
python文件排序的方法总结
Sep 13 Python
python实现web邮箱扫描的示例(附源码)
Mar 30 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
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
js仿360开机效果
2019/12/26 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
城市规划毕业生求职信
2013/10/10 职场文书
物理教育专业毕业生推荐信
2013/11/03 职场文书
《藤野先生》教学反思
2014/02/19 职场文书
父亲节活动策划方案
2014/08/24 职场文书
通知函的格式
2015/04/27 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL