详解Python 解压缩文件


Posted in Python onApril 09, 2019

zipfile模块及相关方法介绍:

1 压缩

1.1 创建zipfile对象

zipfile.ZipFile(file, mode='r', compression=0, allowZip64=True, compresslevel=None)

创建Zipfile对象,主要参数:

1>file压缩包名称;

2>mode:读'r'或者写'w'模式;

3>compression:设置压缩格式;

4>compresslevel:压缩等级;

压缩格式分类:

详解Python 解压缩文件

1.2 添加压缩文件

zipobj.write(self, filename, arcname=None, compress_type=None, compresslevel=None)

参数说明:

1>fiename:添加文件路径;

2>arcname:归档文件路径与名称;

1.3 添加压缩数据

zipobj.writestr(zinfo_or_arcname, data, compress_type=None, compresslevel=None)

参数说明:

1>zinfo_or_arcname:归档文件名称;

2>data:压缩数据str或者byte,如果数据为str,需要先进行Utf-8编码;

1.4 关闭

关闭压缩文件:

zipobj.close()

1.5 一个例子:

压缩目录如下:

详解Python 解压缩文件

代码实现:

import zipfile
logdir = '/home/linux/logs'
zipname = '/home/linux/logs.zip'
#创建zip对象,
fzip = zipfile.ZipFile(zipname, 'w', zipfile.ZIP_DEFLATED)
#遍历要压缩目录
flist = os.listdir(logdir)
for name in flist:
  fpath = os.path.join(logdir, name)
  #写入要压缩文件
  fzip.write(fpath)
#关闭
fzip.close()

进入目录解压,文件路径如下:

详解Python 解压缩文件

可以看到,我们将整个目录添加到压缩文件中,其实我们更想做的是logs/*.log;

对代码进行修改:

logdir = '/home/linux/logs'
zipname = '/home/linux/logs.zip'
import zipfile
#创建zip对象,
fzip = zipfile.ZipFile(zipname, 'w', zipfile.ZIP_DEFLATED)
#遍历要压缩目录
flist = os.listdir(logdir)
#获取压缩目录名称
basename = os.path.basename(logdir)
for name in flist:
  fpath = os.path.join(logdir, name)
  arcname = os.path.join(basename, name)
  #写入要压缩文件,并添加归档文件名称
  fzip.write(fpath, arcname=arcname)
#关闭
fzip.close()

压缩之后,解压缩内容:

详解Python 解压缩文件

这个才是我们想要的。

2.获取压缩包信息

打开压缩包:

frzip = zipfile.ZipFile(zipname, 'r', zipfile.ZIP_DEFLATED):只读方式打开;
frzip.printdir(),显示压缩包文件信息
File Name                       Modified       Size
logs/1003.log                 2019-04-09 10:00:10      17
logs/1001.log                 2019-04-09 10:00:06      17
logs/1004.log                 2019-04-09 10:00:12      17
logs/1002.log                 2019-04-09 10:00:08      17
logs/1000.log                 2019-04-09 10:00:04      17
frzip.filelist:记录压缩包文件信息,与printdir类似,内容如下:
[<ZipInfo filename='logs/1003.log' compress_type=deflate filemode='-rw-r--r--' file_size=17 compress_size=17>,
 <ZipInfo filename='logs/1001.log' compress_type=deflate filemode='-rw-r--r--' file_size=17 compress_size=17>,
 <ZipInfo filename='logs/1004.log' compress_type=deflate filemode='-rw-r--r--' file_size=17 compress_size=17>,
 <ZipInfo filename='logs/1002.log' compress_type=deflate filemode='-rw-r--r--' file_size=17 compress_size=17>,
 <ZipInfo filename='logs/1000.log' compress_type=deflate filemode='-rw-r--r--' file_size=17 compress_size=17>]
frzip.getinfo(name):获取指定arcname的信息:
frzip.getinfo('logs/1003.log')
#输出结果:
<ZipInfo filename='logs/1003.log' compress_type=deflate filemode='-rw-r--r--' file_size=17 compress_size=17>
frzip.namelist():获取压缩文件列表
['logs/1003.log',
 'logs/1001.log',
 'logs/1004.log',
 'logs/1002.log',
 'logs/1000.log']

3 解压压缩包

frzip.extract(member, path=None, pwd=None):解压缩一个文件到指定目录;

参数:

member:压缩包中文件;

path:解压缩到指定目录,默认解压到当前目录;

frzip.extractall(path=None, members=None, pwd=None):解压缩多个文件到指定目录;

参数:

path:指定的解压目录;

members:指定解压文件,默认解压全部;

解压指定文件到指定目录:

#可以自己定义路径
zipname = '/home/linux/logs.zip'
extractpath = '/home/linux/1'
#注意压缩格式选择
frzip = zipfile.ZipFile(zipname, 'r', zipfile.ZIP_DEFLATED)
extractfile = frzip.namelist()
if len(extractfile):
  extname = extractfile[0]
  print('extract file:', extname)
  frzip.extract(extractfile[0], extractpath)
frzip.close()

输出结果:extract file: logs/1003.log,在extractpath目录下有log文件;

使用frzip.extractall将所有文件解压到指定目录:

#可以自己定义路径
zipname = '/home/linux/logs.zip'
extractpath = '/home/linux/1'
#注意压缩格式选择
frzip = zipfile.ZipFile(zipname, 'r', zipfile.ZIP_DEFLATED)
#将所有文件加压缩到指定目录
frzip.extractall(extractpath)
frzip.close()

除了zipfile还有其它模块:

import gzip;
import tarfile;

这些模块使用方式都类似,后面文章中我们在详解讲解。

总结

以上所述是小编给大家介绍的python解压缩文件详解,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧!

Python 相关文章推荐
在Python中操作时间之mktime()方法的使用教程
May 22 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
Python实现注册、登录小程序功能
Sep 21 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
Nov 14 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
python matplotlib库直方图绘制详解
Aug 10 Python
3行Python代码实现图像照片抠图和换底色的方法
Oct 10 Python
python next()和iter()函数原理解析
Feb 07 Python
Django接收照片储存文件的实例代码
Mar 07 Python
python连接mysql数据库并读取数据的实现
Sep 25 Python
pycharm 实现复制一行的快捷键
Jan 15 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
Apr 09 #Python
Python中使用logging和traceback模块记录日志和跟踪异常
Apr 09 #Python
由Python编写的MySQL管理工具代码实例
Apr 09 #Python
python实现爬山算法的思路详解
Apr 09 #Python
Python使用Pickle模块进行数据保存和读取的讲解
Apr 09 #Python
Python爬取数据保存为Json格式的代码示例
Apr 09 #Python
python实现QQ空间自动点赞功能
Apr 09 #Python
You might like
PHP Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
php+mysql实现无限级分类
2015/11/11 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
python使用post提交数据到远程url的方法
2015/04/29 Python
Python中的集合类型知识讲解
2015/08/19 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
详解Django rest_framework实现RESTful API
2018/05/24 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
NumPy排序的实现
2020/01/21 Python
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
英国复古服装购物网站:Collectif
2019/10/30 全球购物
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
四年大学生活的个人自我评价
2013/12/11 职场文书
爱护花草树木的标语
2014/06/11 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript