博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python札记 -- 文件压缩
阅读量:5223 次
发布时间:2019-06-14

本文共 2132 字,大约阅读时间需要 7 分钟。

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

    一、简单的例子    

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

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

1 #!/usr/bin/env python 2 #coding:utf-8 3   4 import zipfile 5   6 file = '/home/jacky/tmp/zip_test/test.apk' 7   8 f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED) 9 f.write(file)10 f.close()

首先使用ZipFile打开一个压缩文件,然后将需要压缩的文件通过write方法传入,最后close即可。跟普通文件的读写操作是一致的。执行后的效果如下:

    二、重写压缩包里的目录结构    

    压缩单个文件的功能已经实现了,美中不足的是,压缩包里面的目录结构跟传进去的参数结构是一样的。

    可以通过在write方法传递arcname参数来设置路径(wirte的函数原型为ZipFile.write(filename[, arcname[, compress_type]]))。修改代码如下:

1 #!/usr/bin/env python 2 #coding:utf-8 3  4 import zipfile 5  6 file = '/home/jacky/tmp/zip_test/test.apk' 7  8 f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED) 9 f.write(file, '/res/new_file_name.apk')10 f.close()

    三、压缩目录   

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

1 #!/usr/bin/env python 2 #coding:utf-8 3  4 import zipfile 5  6 file = '/home/jacky/tmp/zip_test/' 7  8 f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED) 9 f.write(file)10 f.close()

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

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

1 #!/usr/bin/env python 2 #coding:utf-8 3  4 import zipfile 5 import glob 6  7 files = glob.glob('/home/jacky/tmp/zip_test/zip_dir_test/*') 8 f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED) 9 10 for file in files:11     f.write(file)12 f.close()

效果如下:

    生成的压缩包还可以更完美些,比如保留源文件的名字,修改一下压缩包里面的目录结构。借组os模块的os.path.basename(path),可以取得文件名,修改后代码如下:

1 #!/usr/bin/env python 2 #coding:utf-8 3  4 import zipfile 5 import glob 6 import os 7  8 files = glob.glob('/home/jacky/tmp/zip_test/zip_dir_test/*') 9 f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)10 11 for file in files:12     f.write(file, '/MyDirPath/' + os.path.basename(file))13 f.close()

 这样就可以根据实际需要生成压缩包里面的目录结构了。

    四、其他功能

    既然可以压缩,当然Python也提供了解压的方法。ZipFile.extractall([path[, members[, pwd]]]),path为解压路径,members为需要解压的文件,另外如果压缩文件有密码时,需要输入pwd。

    ZipFile模块内还有很多实用的功能,限于篇幅所限,就不一一叙述了,大家可查阅Python的官方文档。

 

 

转载于:https://www.cnblogs.com/PandaBamboo/p/3254449.html

你可能感兴趣的文章
com.fasterxml.jackson.databind.JsonMappingException
查看>>
【UVa 540】Team Queue
查看>>
排序算法(二)
查看>>
Python内置函数(36)——iter
查看>>
HTML标签_1
查看>>
jsp组成元素
查看>>
排序算法(转)
查看>>
windows自带的可生成各种数据库连接字符串工具打开方法
查看>>
Python命名规范
查看>>
滚动条
查看>>
程序员的自我修养九Windows下的动态链接
查看>>
Codeforces Round #361 (Div. 2)
查看>>
细说WebSocket - Node篇
查看>>
Extjs控件之 grid打印功能
查看>>
枚举类型(不常用)递归
查看>>
minggw 安装
查看>>
Jquery操作cookie,实现简单的记住用户名的操作
查看>>
[BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树
查看>>
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
静态变量数组实现LRU算法
查看>>