详解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中优化NumPy包使用性能的教程
Apr 23 Python
快速入手Python字符编码
Aug 03 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
Jan 04 Python
python3+PyQt5自定义视图详解
Apr 24 Python
浅谈python之新式类
Aug 12 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
python 为什么说eval要慎用
Mar 26 Python
cProfile Python性能分析工具使用详解
Jul 22 Python
Django 重写用户模型的实现
Jul 29 Python
Python threading的使用方法解析
Aug 28 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
Dec 23 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 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实现的获取URL信息的类
2007/01/02 PHP
相对路径转化成绝对路径
2007/04/10 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
JQuery中$之选择器用法介绍
2011/04/05 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
axios基本入门用法教程
2017/03/25 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
vue仿ios列表左划删除
2019/09/26 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
详解Python中的Descriptor描述符类
2016/06/14 Python
Django rest framework实现分页的示例
2018/05/24 Python
PyTorch基本数据类型(一)
2019/05/22 Python
Django 导出项目依赖库到 requirements.txt过程解析
2019/08/23 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
专科毕业生就业推荐信
2013/11/01 职场文书
韩国商务邀请函
2014/01/14 职场文书
学习雷锋活动总结
2014/04/29 职场文书
村庄绿化方案
2014/05/07 职场文书
安全承诺书格式
2014/05/21 职场文书
医院搬迁方案
2014/06/14 职场文书
公安机关起诉意见书
2015/05/20 职场文书
教师节主持词开场白
2015/05/29 职场文书
Nginx限流和黑名单配置
2022/05/20 Servers