详解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中为feedparser设置超时时间避免堵塞
Sep 28 Python
linux 下实现python多版本安装实践
Nov 18 Python
Python中装饰器的一个妙用
Feb 08 Python
Python实现的批量下载RFC文档
Mar 10 Python
Python使用xlrd模块操作Excel数据导入的方法
May 26 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
Python实现的KMeans聚类算法实例分析
Dec 29 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
python3 字符串知识点学习笔记
Feb 08 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
python 使用事件对象asyncio.Event来同步协程的操作
May 04 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 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
phpnow php探针环境检测代码
2014/11/04 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
关于JavaScript的一些看法
2009/05/27 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
JS实现可改变列宽的table实例
2013/07/02 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
python使用range函数计算一组数和的方法
2015/05/07 Python
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Python random模块用法解析及简单示例
2017/12/18 Python
把pandas转换int型为str型的方法
2019/01/29 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
会计专业大学生求职信范文
2014/01/28 职场文书
求职信需要的五点内容
2014/02/01 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
早上好问候语大全
2015/11/10 职场文书