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

.gz .tar  .tgz .zip .rar

简介

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

  • tar: linux系统下的打包工具,只打包,不压缩

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

  • zip: 不同于gzip,虽然使用相似的算法,可以打包压缩多个文件,不过分别压缩文件,压缩率低于tar。

  • rar:打包压缩文件,最初用于DOS,基于window操作系统。压缩率比zip高,但速度慢,随机访问的速度也慢。

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表示。

由于这里有多个文件,我们先读取所有文件名,然后解压,如下:

 '''遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''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

安装完成。

 '''遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''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包
打包代码:

 '''遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''#!/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 实现tar文件压缩解压的实例详解相关推荐

  1. python压缩文件tar_python 实现tar文件压缩解压的实例详解

    python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...

  2. linux为什么用tar压缩,linux下tar压缩和解压命令用法详解

    linux下tar压缩和解压命令用法详解 2017-03-25 14:06 分享人:老牛 将/usr/local/test目录下所有文件仅打包,不压缩到 /usr/local/auto_bak/目下 ...

  3. java 输入流可以合并吗_Java 使用IO流实现大文件的分割与合并实例详解

    java 使用IO流实现大文件的分割与合并 文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时 ...

  4. java文件流 m.jb51.net_FasfDFS整合Java实现文件上传下载功能实例详解

    今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 org.c ...

  5. python url解码_对python中url参数编码与解码的实例详解

    一.简介 在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码. 二.关键代码 1.url编码 对字符串编码用urllib.parse包下的quote(string, saf ...

  6. python中label有什么用_对Python中TKinter模块中的Label组件实例详解

    Python2.7.4 OS-W7x86 1. 简介 Label用于在指定的窗口中显示文本和图像.最终呈现出的Label是由背景和前景叠加构成的内容. Label组件定义函数:Label(master ...

  7. pythonfor循环案例教程_python开发之for循环操作实例详解,pythonfor实例详解

    python开发之for循环操作实例详解,pythonfor实例详解 本文实例讲述了python开发之for循环操作.分享给大家供大家参考,具体如下: 下面是我做的一些学习记录供大家参考: #基本的f ...

  8. mysql——解压版安装详解

    一.引言 原来一直用sqlserver.oracle数据库了,mysql数据库还是用着比较方便,轻量级,虽然没有sqlite轻,功能还是比较强大的.用过win安装版,但是装了一堆东西(workbenc ...

  9. 怎么创建python django项目_创建Django项目图文实例详解

    本文实例讲述了创建Django项目的方法.分享给大家供大家参考,具体如下: 创建Django项目 创建一个HelloDjango项目 GitHub地址:https://github.com/liang ...

最新文章

  1. LeetCode简单题之“气球” 的最大数量
  2. 计算机编程课程顺序_您可以在6月开始参加630项免费的在线编程和计算机科学课程...
  3. Linux下时间戳格式和标准时间格式的转换
  4. Spring多线程批量发送邮件(ThreadPoolTaskExecutor)
  5. [恢]hdu 2021
  6. 转-WSGI Tutorial
  7. 仿MIUI音量变化环形进度条实现
  8. 【转载】关于.NET下开源及商业图像处理(PSD)组件
  9. 在IFC标准模型如何实现室内灯光管控?
  10. 如何美化CheckBox
  11. mysql多条语句union_Mysql同时执行多个select语句——union
  12. mysql5.7架设征途服务器,征途服务端架设详细教程
  13. Reflex仓库管理系统(WMS)简介
  14. amCharts 5.2.31 Crack
  15. ftp软件绿色版,四款好用的绿色版ftp软件
  16. redis | 二、redis安装
  17. peel在Linux生成excel,如何将多个Excel文件合并成一个且保留原有数据?
  18. javascript学习笔记下篇--浏览器对象
  19. 视频播放器 影音播放器PotPlayer v1.7.17891 绿色无广告版
  20. 航空公司大数据建设的思考

热门文章

  1. 在Java中,以下数据类型中,需要内存最多的是()
  2. 中国印刷业目前发展的四大主要特点
  3. Solrj demo
  4. Android5.1 修改距离感应的阈值
  5. Reading:一款不错的Material Desgin风格的Kotlin版本的开源APP
  6. MyBatis 分页插件
  7. unity Android平台最佳效果探索(二)
  8. nn.MultiheadAttention
  9. ExoPlayer播放器在瑞芯微rk3228CPU播放H264编码格式1080P媒体资源编解码器解码失败问题
  10. Hadoop生态系统(HDFS、ZooKeeper、MapRuduce、Pig....)