详解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中查看变量内存地址的方法
May 05 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
Python生成随机密码的方法
Jun 16 Python
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 Python
Python实现读取及写入csv文件的方法示例
Jan 12 Python
Python数据可视化之画图
Jan 15 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
python实现图片转字符小工具
Apr 30 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
Python多线程Threading、子线程与守护线程实例详解
Mar 24 Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 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
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
浅谈Javascript鼠标和滚轮事件
2012/06/27 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
python如何获取当前文件夹下所有文件名详解
2019/01/25 Python
python制作填词游戏步骤详解
2019/05/05 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
Python同时迭代多个序列的方法
2020/07/28 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
PyCharm最新激活码PyCharm2020.2.3有效
2020/11/18 Python
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
捷克玩具商店:Bambule
2019/02/23 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
2015/08/25 面试题
职员竞岗演讲稿
2014/05/14 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
解析Redis Cluster原理
2021/06/21 Redis