Python札记 -- 文件压缩
在日常工作当中免不了要对文件进行压缩,Python标准库里也提供了实现压缩功能的模块。
一、简单的例子
首先了解一下压缩单个文件在Python中怎么实现。竹风建了个测试文件夹zip_text,里面有test.apk和zip_model_test.py两个文件。如下图所示: 
目标是将test.apk打包成test.zip。编写如下代码:
#!/usr/bin/env python
#coding:utf-8 import zipfile file = '/home/jacky/tmp/zip_test/test.apk' f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)
f.write(file)
f.close()
首先使用ZipFile打开一个压缩文件,然后将需要压缩的文件通过write方法传入,最后close即可。跟普通文件的读写操作是一致的。执行后的效果如下:

二、重写压缩包里的目录结构
压缩单个文件的功能已经实现了,美中不足的是,压缩包里面的目录结构跟传进去的参数结构是一样的。
可以通过在write方法传递arcname参数来设置路径(wirte的函数原型为ZipFile.write(filename[, arcname[, compress_type]]))。修改代码如下:
#!/usr/bin/env python
#coding:utf-8 import zipfile file = '/home/jacky/tmp/zip_test/test.apk' f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)
f.write(file, '/res/new_file_name.apk')
f.close()
三、压缩目录
但是更多的情况是要压缩一个文件夹。直接将文件夹作为参数传入,会有什么样的效果呢?
#!/usr/bin/env python
#coding:utf-8 import zipfile file = '/home/jacky/tmp/zip_test/' f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)
f.write(file)
f.close()
执行代码后,的确生成了一个压缩文件,可惜解压这个文件的时候,却发现里面只有文件夹的结构,一个文件都没有。。。
想达到压缩文件夹的效果,得借助一下glob模块了。借助glob.glob(pathname)来获得一个由指定文件夹下的文件名组成的列表,然后对此进行遍历,代码如下:
#!/usr/bin/env python
#coding:utf-8 import zipfile
import glob files = glob.glob('/home/jacky/tmp/zip_test/zip_dir_test/*')
f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED) for file in files:
f.write(file)
f.close()
效果如下:
生成的压缩包还可以更完美些,比如保留源文件的名字,修改一下压缩包里面的目录结构。借组os模块的os.path.basename(path),可以取得文件名,修改后代码如下:
#!/usr/bin/env python
#coding:utf-8 import zipfile
import glob
import os files = glob.glob('/home/jacky/tmp/zip_test/zip_dir_test/*')
f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED) for file in files:
f.write(file, '/MyDirPath/' + os.path.basename(file))
f.close()
这样就可以根据实际需要生成压缩包里面的目录结构了。
四、其他功能
既然可以压缩,当然Python也提供了解压的方法。ZipFile.extractall([path[, members[, pwd]]]),path为解压路径,members为需要解压的文件,另外如果压缩文件有密码时,需要输入pwd。
ZipFile模块内还有很多实用的功能,限于篇幅所限,就不一一叙述了,大家可查阅Python的官方文档。
Python札记 -- 文件压缩的更多相关文章
- python zipfile 文件压缩和文件
文件压缩 zipfile_obj = zipfile.ZipFile(zipfile_objpath, 'a', zipfile.ZIP_DEFLATED) for dirpath, dirnames ...
- python zip文件压缩和解压
压缩 import shutil zipOutputName = "1234" # 输出1234.zip fileType = "zip" # 文件类型zip ...
- Python之文件与目录操作及压缩模块(os、shutil、zipfile、tarfile)
Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...
- python对文件的压缩解压
python自带的zipfile的模块支持对文件的压缩和解压操作 zipfilp.ZipFile 表示创建一个zip对象 zipfile.ZipFile(file[, mode[, compressi ...
- python批量处理压缩文件
python批量处理压缩文件 博客小序:在数据的处理中,下载的数据很有可能是许多个压缩文件,自己一个一个解压较为麻烦,最近几日自己在处理一次下载的数据时,遇到大量的压缩数据需要处理,于是利用pytho ...
- Python脚本破解压缩文件口令(zipfile)
环境:Windows python版本2.7.15 Python中操作zip压缩文件的模块是 zipfile . 相关文章:Python中zipfile压缩文件模块的使用 我们破解压缩文件的口令也是用 ...
- Python中zipfile压缩文件模块的使用
目录 zipfile 压缩一个文件 解压文件 高级应用 利用 zipfile 模块破解压缩文件口令:Python脚本破解压缩文件口令 zipfile Python 中 zipfile 模块提供了对 z ...
- python 文件压缩及解压
文件压缩 import os import zipfile def zip_dir(dirname,zipfilename): """ | ##@函数目的: 压缩指定目录 ...
- python计算文件的md5值
前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当 ...
随机推荐
- survey on Time Series Analysis Lib
(1)I spent my 4th year Computing project on implementing time series forecasting for Java heap usage ...
- 一个暂时无法理解的bug
BUG bug的存在是不可避免的 一个静态变量,改成绝对地址之后可以生成静态页面.但是主页有一个用了静态变量的超链接就不能用, 最后我加了一个相对地址的静态变量,可以解决这个问题.
- Maven之自定义archetype生成项目骨架(一)
Maven之自定义archetype生成项目骨架(一) 标签: mavennexus插件 2015-07-15 16:40 2443人阅读 评论(0) 收藏 举报 分类: Maven技术(9) ...
- 【转载】Java中的回车换行符/n /r /t
source:http://hane00.blog.163.com/blog/static/1600615220126204446809/ '\r'是回车,'\n'是换行,前者使光标到行首,后者使光标 ...
- c#下调用dll动态链接库[转]
C# 调用传统的 API 动态链接库,是.NET开发经常被讨论的问题. 比如有这么一个动态链接库(delphi 语言): library DelphiDLL; uses SysUtils, Class ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
- 通过挂载系统光盘搭建本地yum仓库
1,配置本地yum源: 把系统光盘挂载到文件夹aaa(aaa为自己创建的文件夹). [root@localhost /]# mount dev/cdrom /aaa 2,修改yum配置文件: yum的 ...
- php压缩文件
$filename = './qrcode.zip'; // 最终生成的文件名(含路径) //生成文件 $zip = new ZipArchive (); // 使用本类,linux需开启zlib,w ...
- css中怎么设置透明度的问题
小伙伴们是不是在找怎么样去设置页面的透明度的方法呢...别找了,我这儿就有,而且肯定够用了. 我自己会用到的就有两种,可以和大家分享一下. 1.用opcity的方法去设置透明度.代码如下: .div ...
- Oracle学习笔记2
主键 create table userinfo_test( userid number(3,0), username varchar2(20), pwd varchar2(20), constrai ...