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

 更新时间:2019-07-05 16:58:57   作者:佚名   我要评论(0)

这里讨论使用Python解压例如以下五种压缩文件:
.gz .tar .tgz .zip .rar
简单介绍
gz: 即gzip。通常仅仅能压缩一个文件。与tar结合起来就能够实现先打包,

这里讨论使用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) 

总结

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

您可能感兴趣的文章:

  • Python实现压缩文件夹与解压缩zip文件的方法
  • 解决python3中解压zip文件是文件名乱码的问题
  • Python实现压缩和解压缩ZIP文件的方法分析
  • python 实现tar文件压缩解压的实例详解
  • Python实现向服务器请求压缩数据及解压缩数据的方法示例
  • python用模块zlib压缩与解压字符串和文件的方法
  • Python实现压缩与解压gzip大文件的方法
  • python中将zip压缩包转为gz.tar的方法

相关文章

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

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

    这里讨论使用Python解压例如以下五种压缩文件: .gz .tar .tgz .zip .rar 简单介绍 gz: 即gzip。通常仅仅能压缩一个文件。与tar结合起来就能够实现先打包,
    2019-07-05
  • 基于vue实现圆形菜单栏组件

    基于vue实现圆形菜单栏组件

    整个样式都是基于css3 得transform而实现得。 每个扇形角度为360/12=30deg,当然,你不想做圆形也可以,公式就是 扇形角度=你想绘制得角度/扇形个数 当你
    2019-07-05
  • 关于Python 的简单栅格图像边界提取方法

    关于Python 的简单栅格图像边界提取方法

    在GIS中,栅格属性里有关于栅格自身的信息,背景(nodata value)对于识别一张图像的边界像元尤为重要,我们目的只要把每行每列中的第一次出现不是nodata的像
    2019-07-05
  • Android使用Xutils3进行断点下载的实例

    Android使用Xutils3进行断点下载的实例

    使用工具:Android studio 3.0 使用方法: 一:在build.gradle(Module:app)中添加依赖 implementaion 'org.xutils:xutils:3.5.1' 二:单独创建一个MyApp类
    2019-07-05
  • Python 的字典(Dict)是如何存储的

    Python 的字典(Dict)是如何存储的

    前言 Python 的字典有好多个名称("映射"、"哈希"、"散列"或者"关系数组"),那你知道为什么字典会被称为 Hash(翻译为"哈希"或"散列")吗? 你知道为什么
    2019-07-05
  • 如何通过Maven仓库安装Spire系列的Java产品

    如何通过Maven仓库安装Spire系列的Java产品

    前言 Spire系列库中已发布的Java产品目前有三个,即Spire.PDF for Java、Spire.Presentation for Java、Spire.Barcode for Java。使用该Java产品,除了可以从
    2019-07-05
  • Linux (Ubuntu 18.04) 下安装vim编辑器的方法

    Linux (Ubuntu 18.04) 下安装vim编辑器的方法

    大家可以去Ubuntu官网下载桌面系统: https://ubuntu.com/download/desktop ,虽然最新版是19.04,但是建议大家下载稳定版18.04。安装过程非常简洁,我使用的
    2019-07-05
  • python获取txt文件词向量过程详解

    python获取txt文件词向量过程详解

    在读取https://github.com/Embedding/Chinese-Word-Vectors中的中文词向量时,选择了一个有3G多的txt文件,之前在做词向量时用的是word2vec,所以直接导入模型
    2019-07-05
  • 用Python实现将一张图片分成9宫格的示例

    用Python实现将一张图片分成9宫格的示例

    经常看到朋友圈或者空间里有朋友发布照片时,将朋友圈的照片切分为九宫格,参考了一些大神的博客资料,现整理如下; 将图片分拆成九宫格的思路: 读取图片->填充图
    2019-07-05
  • Linux上为你的任务创建一个自定义的系统托盘指示器

    Linux上为你的任务创建一个自定义的系统托盘指示器

    系统托盘图标如今仍是一个很神奇的功能。只需要右击图标,然后选择想要的动作,你就可以大幅简化你的生活并且减少日常行为中的大量无用的点击。 一说到有用的
    2019-07-05

最新评论