详解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读取Json字典写入Excel表格的方法
Jan 03 Python
Python3 中文文件读写方法
Jan 23 Python
基于python批量处理dat文件及科学计算方法详解
May 08 Python
python pygame模块编写飞机大战
Nov 20 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
Aug 23 Python
详解pyinstaller selenium python3 chrome打包问题
Oct 18 Python
Jupyter Notebook打开任意文件夹操作
Apr 14 Python
pycharm 激活码及使用方式的详细教程
May 12 Python
用Python 执行cmd命令
Dec 18 Python
python之随机数函数的实现示例
Dec 30 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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 一元分词算法
2009/11/30 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
smarty简单分页的实现方法
2014/10/27 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
js实现简单秒表走动的时钟特效
2020/03/25 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
webpack3之loader全解析
2017/10/26 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
2019/09/06 Javascript
jQuery实现开关灯效果
2020/08/02 jQuery
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python中apply函数的用法实例教程
2014/07/31 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python导入txt数据到mysql的方法
2015/04/08 Python
使用pdb模块调试Python程序实例
2015/06/02 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
简历上的自我评价怎么写
2014/01/28 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
学习十八大报告感言
2014/02/28 职场文书
初三学生评语大全
2014/04/24 职场文书
党日活动总结
2014/05/07 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
聘用意向书
2014/07/29 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python