详解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引用类型和值类型的区别与使用解析
Oct 17 Python
dataframe设置两个条件取值的实例
Apr 12 Python
对python requests的content和text方法的区别详解
Oct 11 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 Python
Python3标准库总结
Feb 19 Python
聊聊python里如何用Borg pattern实现的单例模式
Jun 06 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
Python之——生成动态路由轨迹图的实例
Nov 22 Python
Flask缓存静态文件的具体方法
Aug 02 Python
通过实例解析Python文件操作实现步骤
Sep 21 Python
matplotlib部件之套索Lasso的使用
Feb 24 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
关于文本留言本的分页代码
2006/10/09 PHP
php全排列递归算法代码
2012/10/09 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
PHP脚本自动识别验证码查询汽车违章
2016/12/20 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
2014/03/12 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
浅析Python中的序列化存储的方法
2015/04/28 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
物流仓管员岗位职责
2013/12/04 职场文书
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
大学生就业意向书范文
2014/04/01 职场文书
乡镇群众路线整改落实情况汇报
2014/10/28 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android