详解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中使用多进程来实现并行处理的方法小结
Aug 09 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
python3监控CentOS磁盘空间脚本
Jun 21 Python
基于python实现简单日历
Jul 28 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
Python 处理图片像素点的实例
Jan 08 Python
python学生管理系统
Jan 30 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
python银行系统实现源码
Oct 25 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
python使用ctypes库调用DLL动态链接库
Oct 22 Python
python3实现名片管理系统(控制台版)
Nov 29 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购物车实现代码
2011/10/10 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
理解javascript异步编程
2016/01/27 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
vue全屏事件开发详解
2020/06/17 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
10款最好的Web开发的 Python 框架
2015/03/18 Python
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
Python实现简单字典树的方法
2016/04/29 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
数字漫画:comiXology
2020/06/13 全球购物
一份报关员的职业规划范文
2014/01/08 职场文书
大型营销活动计划书
2014/04/28 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
阿甘正传观后感
2015/06/01 职场文书
关于Python使用turtle库画任意图的问题
2022/04/01 Python
如何通过一篇文章了解Python中的生成器
2022/04/02 Python