python zip文件 压缩


Posted in Python onDecember 24, 2008

从简单的角度来看的话,zip格式会是个不错的选择,而且python对zip格式的支持够简单,够好用。
1)简单应用
如果你仅仅是希望用python来做压缩和解压缩,那么就不用去翻文档了,这里提供一个简单的用法,让你一看就能明白。
import zipfile
f = zipfile.ZipFile('filename.zip', 'w' ,zipfile.ZIP_DEFLATED)
f.write('file1.txt')
f.write('file2.doc')
f.write('file3.rar')
f.close()
f.zipfile.ZipFile('filename')
f.extractall()
f.close()
不知道上面的例子是不是足够简单呢?
1.1 zipfile.ZipFile(fileName[, mode[, compression[, allowZip64]]])
fileName是没有什么疑问的了。
mode和一般的文件操作一样,'r'表示打开一个存在的只读ZIP文件;'w'表示清空并打开一个只写的ZIP文件,或创建一个只写的ZIP文件;'a'表示打开一个ZIP文件,并添加内容。
compression表示压缩格式,可选的压缩格式只有2个:ZIP_STORE;ZIP_DEFLATED。ZIP_STORE是默认的,表示不压缩;ZIP_DEFLATED表示压缩,如果你不知道什么是Deflated,那么建议你去补补课。
allowZip64为True时,表示支持64位的压缩,一般而言,在所压缩的文件大于2G时,会用到这个选项;默认情况下,该值为False,因为Unix系统不支持。
1.2 zipfile.close()
说真的,这个没什么可说的,如果有的话,那就是你写入的任何文件在关闭之前不会真正写入磁盘。
1.3 zipfile.write(filename[, arcname[, compress_type]])
acrname是压缩文件中该文件的名字,默认情况下和filename一样
compress_type的存在是因为zip文件允许被压缩的文件可以有不同的压缩类型。
1.4 zipfile.extractall([path[, member[, password]]])
path解压缩目录,没什么可说的
member需要解压缩的文件名儿列表
password当zip文件有密码时需要该选项
对于简单的应用,这么多就够了。
2)高级应用
2.1 zipfile.is_zipfile(filename)
判断一个文件是不是压缩文件
2.2 ZipFile.namelist()
返回文件列表
2.3 ZipFile.open(name[, mode[, password]])
打开压缩文档中的某个文件
2.4 ZipFile.infolist()
2.5 ZipFile.getinfo(name)
上述文件返回ZipInfo对象,只不过一个返回的是列表,一个返回的是一个ZipInfo
ZipInfo类
2.6 ZipInfo.filename
2.7 ZipInfo.date_time
返回值的格式为(year,month,date,hour,minute,second)
2.8 ZipInfo.compress_type
2.9 ZipInfo.comment
2.10ZipInfo.extra
2.11ZipInfo.create_system
2.12ZipInfo.extract_version
2.13ZipInfo.reserved 总是0
2.14ZipInfo.flag_bits
2.15ZipInfo.volume
2.16ZipInfo.internal_attr
2.17ZipInfo.external_attr
2.18ZipInfo.header_offset
2.19ZipInfo.CRC
2.20ZipInfo.file_size
2.21ZipInfo.compress_size
2.22ZipFile.testzip()
检查每个文件和它对应的CRC,如果有错误返回对应的文件列表
2.23ZipFile.setpassword(password)
2.24ZipFile.read(name[,password])
返回对应的文件
2.25ZipFile.printdir()
打印压缩文件夹的信息
2.26ZipFile.writestr(zipinfo_or_arcname, bytes)
PyZipFile类
zipfile.PyZipFile除了上面的方法和属性之外,还有一个特殊的方法
2.27PyZipFile.writepy(pathname,basename)
一般情况下,仅仅压缩.pyc和.pyo文件,不压缩.py文件
----------------------------------------------------------------------
zip文件格式信息
一个 ZIP 文件由三个部分组成:压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志
1)压缩源文件数据区
在这个数据区中每一个压缩的源文件/目录都是一条记录,记录的格式如下: [文件头+ 文件数据 + 数据描述符]

a、文件头结构

组成 长度

文件头标记 4 bytes (0x04034b50)

解压文件所需 pkware 版本 2 bytes

全局方式位标记 2 bytes

压缩方式 2 bytes

最后修改文件时间 2 bytes

最后修改文件日期 2 bytes

CRC-32校验 4 bytes

压缩后尺寸 4 bytes

未压缩尺寸 4 bytes

文件名长度 2 bytes

扩展记录长度 2 bytes

文件名 (不定长度)

扩展字段 (不定长度)


b、文件数据


c、数据描述符

组成 长度

CRC-32校验 4 bytes

压缩后尺寸 4 bytes

未压缩尺寸 4 bytes

这个数据描述符只在全局方式位标记的第3位设为1时才存在(见后详解),紧接在压缩数据的最后一个字节后。这个数据描述符只用在不能对输出的 ZIP 文件进行检索时使用。例如:在一个不能检索的驱动器(如:磁带机上)上的 ZIP 文件中。如果是磁盘上的ZIP文件一般没有这个数据描述符。


2)压缩源文件目录区

在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据

组成 长度

目录中文件文件头标记 4 bytes (0x02014b50)

压缩使用的pkware 版本 2 bytes

解压文件所需 pkware 版本 2 bytes

全局方式位标记 2 bytes

压缩方式 2 bytes

最后修改文件时间 2 bytes

最后修改文件日期 2 bytes

CRC-32校验 4 bytes

压缩后尺寸 4 bytes

未压缩尺寸 4 bytes

文件名长度 2 bytes

扩展字段长度 2 bytes

文件注释长度 2 bytes

磁盘开始号 2 bytes

内部文件属性 2 bytes

外部文件属性 4 bytes

局部头部偏移量 4 bytes

文件名 (不定长度)

扩展字段 (不定长度)

文件注释 (不定长度)


3)压缩源文件目录结束标志

组成 长度

目录结束标记 4 bytes (0x02014b50)

当前磁盘编号 2 bytes

目录区开始磁盘编号 2 bytes

本磁盘上纪录总数 2 bytes

目录区中纪录总数 2 bytes

目录区尺寸大小 4 bytes

目录区对第一张磁盘的偏移量 4 bytes

ZIP 文件注释长度 2 bytes

ZIP 文件注释 (不定长度)

Python 相关文章推荐
python函数返回多个值的示例方法
Dec 04 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
Python基于递归算法实现的走迷宫问题
Aug 04 Python
Python使用re模块正则提取字符串中括号内的内容示例
Jun 01 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
Python中logging日志库实例详解
Feb 19 Python
Python控制台实现交互式环境执行
Jun 09 Python
python/golang 删除链表中的元素
Sep 14 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 14 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 Python
python 数据加密代码
Dec 24 #Python
python 测试实现方法
Dec 24 #Python
Python 面向对象 成员的访问约束
Dec 23 #Python
pymssql ntext字段调用问题解决方法
Dec 17 #Python
python 图片验证码代码
Dec 07 #Python
下载糗事百科的内容_python版
Dec 07 #Python
python 参数列表中的self 显式不等于冗余
Dec 01 #Python
You might like
php 分页原理详解
2009/08/21 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
PHP最常用的正则表达式
2017/02/13 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
JavaScript位移运算符(无符号) >>> 三个大于号 的使用方法详解
2016/03/31 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
微信小程序实现搜索历史功能
2020/03/26 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
Python解决鸡兔同笼问题的方法
2014/12/20 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
承诺书怎么写
2014/03/26 职场文书
低碳环保口号
2014/06/12 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
中秋节祝酒词
2015/08/12 职场文书
Python源码解析之List
2021/05/21 Python
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技