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网络编程学习笔记(10):webpy框架
Jun 09 Python
Python实现在Linux系统下更改当前进程运行用户
Feb 04 Python
Python实现的简单算术游戏实例
May 26 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
python简易实现任意位数的水仙花实例
Nov 13 Python
ipad上运行python的方法步骤
Oct 12 Python
Python调用.NET库的方法步骤
Dec 27 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
Mar 06 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
用python查找统一局域网下ip对应的mac地址
Jan 13 Python
史上最详细的Python打包成exe文件教程
Jan 17 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实现根据url自动生成缩略图的方法
2014/09/23 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
js function定义函数使用心得
2010/04/15 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
介绍一下write命令
2012/09/24 面试题
妇产医师自荐信
2014/01/29 职场文书
甜美蛋糕店创业计划书
2014/01/30 职场文书
高二政治教学反思
2014/02/01 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
导游词之千岛湖
2019/09/23 职场文书