详解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判断windows隐藏文件的方法
Mar 21 Python
Python中非常实用的一些功能和函数分享
Feb 14 Python
Python contextlib模块使用示例
Feb 18 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
Apr 28 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
Python提取特定时间段内数据的方法实例
Apr 01 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
解决python replace函数替换无效问题
Jan 18 Python
python实现图像拼接
Mar 05 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
.img/.hdr格式转.nii格式的操作
Jul 01 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
CI框架装载器Loader.php源码分析
2014/11/04 PHP
PHP Hash算法:Times33算法代码实例
2015/05/13 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
使用python实现baidu hi自动登录的代码
2013/02/10 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
如何开启linux的ssh服务
2015/02/14 面试题
大学生求职中的自我评价
2013/10/01 职场文书
小学教师师德承诺书
2014/05/23 职场文书
应届毕业生自荐信
2014/05/28 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
员工辞退通知书
2015/04/17 职场文书
民事二审代理词
2015/05/25 职场文书
安全伴我行主题班会
2015/08/13 职场文书