Python之文件压缩

Python之文件压缩

在日常工作当中免不了要对文件进行压缩,Python标准库里也提供了实现压缩功能的模块。

一、简单的例子

首先了解一下压缩单个文件在Python中怎么实现。建了个测试文件夹zip_text,里面有test.apk和zip_model_test.py两个文件。如下图所示:

目标是将test.apk打包成test.zip。编写如下代码:

#coding:utf-8

import zipfile

file = 'D:\\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]]))。修改代码如下:

import zipfile

file = 'D:\\zip_test\\test.apk'

f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)

f.write(file, 'new_test.apk')

f.close()

三、压缩目录

但是更多的情况是要压缩一个文件夹。直接将文件夹作为参数传入,会有什么样的效果呢?

执行代码后,的确生成了一个压缩文件,可惜解压这个文件的时候,却发现里面只有文件夹的结构,一个文件都没有。。。

想达到压缩文件夹的效果,得借助一下glob模块了。借助glob.glob()来获得一个由指定文件夹下的文件名组成的列表,然后对此进行遍历,代码如下:

import zipfile

import glob

file = 'D:\\zip_test'

files = glob.glob('D:\\zip_test\\*')

f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)

for file in files:

f.write(file)

f.close()

import zipfile

import glob

import os

file = 'D:\\zip_test'

files = glob.glob('D:\\zip_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的官方文档。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180111G0OSH400?refer=cp_1026

相关快讯

扫码关注云+社区