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端下测试没有问题. 但是当 ...
随机推荐
- myql数据库在cmd下,中文乱码的问题原因
使用navicat把数据导入数据库,这些数据都是中文,导入成功,显式也正常,但是在mysql cmd下都是乱码.检查了我的mysql配置,字符编码都是utf8,包括navicat连接时候也设置过是ut ...
- cesium+ geoserverTerrainProvide+png展示3D高程图展示
一.发布png到geoserver的imagepyramid // translate png to tif epsg:4326 File png = new File(pngPathStr); Bu ...
- 1.1使用内置的Camara应用程序捕捉图像
一: Camara应用程序包含的意图过滤器 <intent-filter> <action android:name="android.media.action.IMAGE ...
- 选择什么样的DOCTYPE
- PHP中phar包的使用
PHP5.3之后支持了类似Java的jar包,名为phar.用来将多个PHP文件打包为一个文件. 首先需要修改php.ini配置将phar的readonly关闭,默认是不能写phar包的,includ ...
- android杂记
1.ArrayAdapter requires the resource ID to be a TextView问题 listView.setAdapter(new ArrayAdapter<S ...
- java-base64编码和解码
一.反射/*** * encode by Base64 */ public static String encodeBase64(byte[]input) throws Exception{ Clas ...
- Server.mappath用法
1.Server.MapPath ("/") 应用程序根目录所在的位置 如 C:\qq\qqroot\ 2.Server.MapPath ("./") 表示所在 ...
- Kiwi iOS驱动测试开发
Kiwi是iOS开发一个行为驱动开发库.目标是提供一个BDD库,精美的简单安装和使用. 安装 使用CocoaPods安装: pod 'Kiwi'如果使用Xcode5则使用: pod 'Kiwi/XCT ...
- 转 :meta name的含义:<META http-equiv=Content-Type content="text/html; charset=gb2312">
meta是什么?meta其实是html语言head区的一个辅助性标签.在几乎所有的网页里,我们都可以看到类似下面这段html代码:<META http-equiv=Content-Type co ...