详解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 map和reduce函数用法示例
Feb 26 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
Oct 14 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
python中对_init_的理解及实例解析
Oct 11 Python
Python线程协作threading.Condition实现过程解析
Mar 12 Python
python 下划线的不同用法
Oct 24 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 Python
python 提取html文本的方法
May 20 Python
使用Python拟合函数曲线
Apr 14 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
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
PHP5/ZendEngine2的改进
2006/10/09 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
jquery获取radio值实例
2014/10/16 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
特殊日期提示功能的实现方法
2016/06/16 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
flask中过滤器的使用详解
2018/08/01 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
django使用channels实现通信的示例
2020/10/19 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
总经理驾驶员岗位职责
2013/12/04 职场文书
银行存款证明样本
2014/01/17 职场文书
高考标语大全
2014/06/05 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
太空授课观后感
2015/06/17 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
多表查询、事务、DCL
2021/04/05 MySQL
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫