详解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实现统计代码行的方法分析
Jul 12 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 Python
python的unittest测试类代码实例
Dec 07 Python
python如何生成网页验证码
Jul 28 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
解决Python pandas plot输出图形中显示中文乱码问题
Dec 12 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
python elasticsearch从创建索引到写入数据的全过程
Aug 04 Python
解决TensorFlow GPU版出现OOM错误的问题
Feb 03 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 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自定义session示例分享
2014/04/22 PHP
php生成动态验证码gif图片
2015/10/19 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
jQuery中fadeOut()方法用法实例
2014/12/24 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
发布一款npm包帮助理解npm的使用
2019/01/03 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
python flask实现分页的示例代码
2018/08/02 Python
python找出完数的方法
2018/11/12 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
python压包的概念及实例详解
2021/02/17 Python
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
大学学习计划书范文
2014/05/02 职场文书
远程教育学习心得体会
2016/01/23 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS