详解python解压压缩包的五种方法


Posted in Python onJuly 05, 2019

这里讨论使用Python解压例如以下五种压缩文件:

.gz .tar  .tgz .zip .rar

简单介绍

gz: 即gzip。通常仅仅能压缩一个文件。与tar结合起来就能够实现先打包,再压缩。

tar: linux系统下的打包工具。仅仅打包。不压缩

tgz:即tar.gz。先用tar打包,然后再用gz压缩得到的文件

zip: 不同于gzip。尽管使用相似的算法,能够打包压缩多个文件。只是分别压缩文件。压缩率低于tar。

rar:打包压缩文件。最初用于DOS,基于window操作系统。

压缩率比zip高,但速度慢。随机?问的速度也慢。

关于zip于rar之间的各种比?。可见:

http://www.comicer.com/stronghorse/water/software/ziprar.htm

gz

因为gz一般仅仅压缩一个文件,全部常与其它打包工具一起工作。比方能够先用tar打包为XXX.tar,然后在压缩为XXX.tar.gz

解压gz,事实上就是读出当中的单一文件,Python方法例如以下:

import gzip
import os
def un_gz(file_name):
 """ungz zip file"""
 f_name = file_name.replace(".gz", "")
 #获取文件的名称,去掉
 g_file = gzip.GzipFile(file_name)
 #创建gzip对象
 open(f_name, "w+").write(g_file.read())
 #gzip对象用read()打开后,写入open()建立的文件里。
 g_file.close()
 #关闭gzip对象

tar

XXX.tar.gz解压后得到XXX.tar,还要进一步解压出来。

*注:tgz与tar.gz是同样的格式,老版本号DOS扩展名最多三个字符,故用tgz表示。

因为这里有多个文件,我们先读取全部文件名称。然后解压。例如以下:

import tarfile
def un_tar(file_name):
  untar zip file"""
 tar = tarfile.open(file_name)
 names = tar.getnames()
 if os.path.isdir(file_name + "_files"):
  pass
 else:
  os.mkdir(file_name + "_files")
 #因为解压后是很多文件,预先建立同名目录
 for name in names:
  tar.extract(name, file_name + "_files/")
 tar.close()

*注:tgz文件与tar文件同样的解压方法。

zip

与tar类似,先读取多个文件名称,然后解压。例如以下:

import zipfile
def un_zip(file_name):
 """unzip zip file"""
 zip_file = zipfile.ZipFile(file_name)
 if os.path.isdir(file_name + "_files"):
  pass
 else:
  os.mkdir(file_name + "_files")
 for names in zip_file.namelist():
  zip_file.extract(names,file_name + "_files/")
 zip_file.close()

rar

由于rar通常为window下使用,须要额外的Python包rarfile。

可用地址: http://sourceforge.net/projects/rarfile.berlios/files/rarfile-2.4.tar.gz/download

解压到Python安装文件夹的/Scripts/文件夹下,在当前窗体打开命令行,

输入Python setup.py install

安装完毕。

import rarfile
import os
def un_rar(file_name):
 """unrar zip file"""
 rar = rarfile.RarFile(file_name)
 if os.path.isdir(file_name + "_files"):
  pass
 else:
  os.mkdir(file_name + "_files")
 os.chdir(file_name + "_files"):
 rar.extractall()
 rar.close()

tar打包

在写打包代码的过程中,使用tar.add()添加文件时,会把文件本身的路径也加进去,加上arcname就能依据自己的命名规则将文件添加tar包

打包代码:

#!/usr/bin/env /usr/local/bin/python 
 # encoding: utf-8 
 import tarfile 
 import os 
 import time 
 
 start = time.time() 
 tar=tarfile.open('/path/to/your.tar,'w') 
 for root,dir,files in os.walk('/path/to/dir/'): 
   for file in files: 
     fullpath=os.path.join(root,file) 
     tar.add(fullpath,arcname=file) 
 tar.close() 
 print time.time()-start

在打包的过程中能够设置压缩规则,如想要以gz压缩的格式打包

tar=tarfile.open('/path/to/your.tar.gz','w:gz')

其它格式例如以下表:

tarfile.open的mode有非常多种:

mode action

tar解包

tar解包也能够依据不同压缩格式来解压。

#!/usr/bin/env /usr/local/bin/python 
 # encoding: utf-8 
 import tarfile 
 import time 
 
 start = time.time() 
 t = tarfile.open("/path/to/your.tar", "r:") 
 t.extractall(path = '/path/to/extractdir/') 
 t.close() 
 print time.time()-start

上面的代码是解压全部的,也能够挨个起做不同的处理,但要假设tar包内文件过多,小心内存哦~ 

tar = tarfile.open(filename, 'r:gz') 
 for tar_info in tar: 
  file = tar.extractfile(tar_info) 
  do_something_with(file)

ps:python实现rar文件解压

1.pip3 install rarfile  安装rarfile库

(注意是解压,压缩这个方法不支持)

#coding=utf-8
import rarfile
path = "E:\\New\\New.rar"
path2 = "E:\\New"
rf = rarfile.RarFile(path)     #待解压文件
rf.extractall(path2)        #解压指定文件路径

总结

以上所述是小编给大家介绍的python解压压缩包的五种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python编程实现从字典中提取子集的方法分析
Feb 09 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
django+mysql的使用示例
Nov 23 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
详解Python3 基本数据类型
Apr 19 Python
Django中的FBV和CBV用法详解
Sep 15 Python
python生成器推导式用法简单示例
Oct 08 Python
Python实现把类当做字典来访问
Dec 16 Python
Python流程控制语句的深入讲解
Jun 15 Python
python接入支付宝的实例操作
Jul 20 Python
Python自动化测试PO模型封装过程详解
Jun 22 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 #Python
python中的colorlog库使用详解
Jul 05 #Python
Python+selenium点击网页上指定坐标的实例
Jul 05 #Python
用Python实现将一张图片分成9宫格的示例
Jul 05 #Python
python获取txt文件词向量过程详解
Jul 05 #Python
Python 的字典(Dict)是如何存储的
Jul 05 #Python
关于Python 的简单栅格图像边界提取方法
Jul 05 #Python
You might like
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
php数据序列化测试实例详解
2017/08/12 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
Javascript 错误处理的几种方法
2009/06/13 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
vue实现文件上传功能
2018/08/13 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
python daemon守护进程实现
2016/08/27 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
奥巴马演讲稿
2014/01/08 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
人力资源部岗位职责
2015/02/11 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript