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端下测试没有问题. 但是当 ...
随机推荐
- sql 将8位字符串转换成日期型
将8位字符串转换成日期型,方法如下: ),)
- 【Docker 在 windows 10 / windows 8 下安装】
步骤: 1. 下载: a.https://github.com/boot2docker/windows-installer/releases 下载一个 windows 客户端: 安装时建议勾选:Boo ...
- ASP.NET MVC+Entity Framework 访问数据库
Entity Framework 4.1支持代码优先(code first)编程模式:即可以先创建模型类,然后通过配置在EF4.1下动态生成数据库. 下面演示两种情形: 1.代码优先模式下,asp.n ...
- 总结30个CSS选择器
或许大家平时总是在用的选择器都是:#id .class 以及标签选择器.可是这些还远远不够,为了在开发中更加得心应手,本文总结了30个CSS3选择器,希望对大家有所帮助. 1 *:通用选择器 * ...
- 【Java】使用iText生成PDF文件
iText介绍 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...
- RGB颜色中的参数是变量的时候,为什么要加上两个+号在左右?
<script> function draw(){ var c=document.getElementById("mycanvas"); var cxt=c.getCo ...
- 面向对象程序设计 第二次作业<1>
Github链接:https://github.com/zora02/object-oriented/tree/master/1001.A%2BB%20Format%20(20) 一.解题 题目 解题 ...
- 安安视频网anan.video为您提供免费高清视频
安安视频网anan.video为您提供免费高清视频,最新电影,电视剧,动漫,微电影,纪录片,音乐MV在线观看(高清):安安视频网,一个干净的视频在线播放网站,百万高清影视,视频在线观看. 安安视频网整 ...
- 进阶——scrapy登录豆瓣解决cookie传递问题并爬取用户参加过的同城活动©seven_clear
最近在用scrapy重写以前的爬虫,由于豆瓣的某些信息要登录后才有权限查看,故要实现登录功能.豆瓣登录偶尔需要输入验证码,这个在以前写的爬虫里解决了验证码的问题,所以只要搞清楚scrapy怎么提交表单 ...
- backbone框架思路
Backbone是MVC框架.如何使用这个框架来简化前端过程呢?作为一个初学者,虽然网上有它的官方文档,但是都是讲的一些方法,思路分析的却对初学者来说,看得晕乎乎的.现在就把自己对这个框架的理解记录在 ...