这里讨论使用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方法如下:

[python] view plain copyimport 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对象

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

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

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

[python] view plain copyimport 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类似,先读取多个文件名,然后解压,如下:

[python] view plain copyimport 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] view plain copyimport 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'r' or 'r:*' Open for reading with transparent compression (recommended).'r:' Open for reading exclusively without compression.'r:gz' Open for reading with gzip compression.'r:bz2' Open for reading with bzip2 compression.'a' or 'a:' Open for appending with no compression. The file is created if it does not exist.'w' or 'w:' Open for uncompressed writing.'w:gz' Open for gzip compressed writing.'w:bz2' Open for bzip2 compressed writing.

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文件的方法相关推荐

  1. python遍历一个文件夹下所有excel,读取所有sheet页,然后写入另一个文件夹下对应模板的excel中

    本来想直接写入,但是我们的excel报表太麻烦了,里面表头有多处要求合并的,用python去写太要命了,想了下,设置一堆空的excel模板,这样只需要把原文件的数据读出来就可以了,简单多了 #读取文件 ...

  2. vue中src文件夹下各文件_Win10下与虚拟机中的linux共享文件夹

    Win10主机和Vmware linux共享文件夹 1.首先确保虚拟机中的linux能ping通主机,证明虚拟机是可以访问到的主机的(这个不会可百度) 2.右击你想要共享的文件夹选择'属性',点击'共 ...

  3. python selenium 获取元素下的元素个数_Python + Selenium,分分钟搭建 Web 自动化框架!(送自动化测试书籍)...

    前言 在程序员的世界中,一切重复性的工作,都应该通过程序自动执行.「自动化测试」就是一个最好的例子.随着互联网应用开发周期越来越短,迭代速度越来越快,只会点点点,不懂开发的手工测试,已经无法满足如今的 ...

  4. python读取二维数组的行列数_Python获取二维数组的行列数的2种方法

    Python获取二维数组的行列数的2种方法 这篇文章主要介绍了Python获取二维数组的行列数的2种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考 ...

  5. python迁移到另一台电脑上网_Python虚拟环境导出包安装到另一台电脑的方法

    环境:Windows 版 Python Python 3.6.8可以用自带的命令建立虚拟环境,不用安装另外的如 virtualenv.virtualenvwrapper等工具. python -m v ...

  6. python更改数据框指定位置的数据_python – 更改数据框中多个loc的最快方法

    我有一个包含100万行的pandas数据帧.我想用另一组值替换列中900,000行的值.有没有for循环(我需要两天才能完成)的快速方法吗? 例如,查看此示例数据框,其中我已将100万行压缩为8行 i ...

  7. python字典的键可以用列表吗_python字典多键值及重复键值的使用方法(详解)

    在Python中使用字典,格式如下: dict={ key1:value1 , key2;value2 ...} 在实际访问字典值时的使用格式如下: dict[key] 多键值 字典的多键值形式如下: ...

  8. python将二维数组转换为一维数组_python的set处理二维数组转一维数组的方法示例...

    for splitValue in set(dataset[:, featureIndex].tolist()): 首先set是一个无序,无重复的数据结构,所以很多时候使用它来进行去重:但是set接收 ...

  9. python统计列表中数字出现的次数_Python实现统计给定列表中指定数字出现次数的方法...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  10. 如何使用uglify-js压缩指定文件夹下的js代码

    前言 客户来了需求:想使用公司的组件包,但组件包的源码不能对其开放,该怎么做呢? 发布后的组件包目录结构如下图所示: 其中,es文件夹下的js代码皆为esm(ES Module)模块 lib文件夹下的 ...

最新文章

  1. CUDA编程遇到的问题
  2. 代码洁癖的春天!Java 效率工具之 Lombok
  3. Objective-C @property和@synthesize
  4. 《中国人工智能学会通讯》——10.22 能源互联网时代
  5. JAVA设计模式详解(六)----------状态模式
  6. 修改CodeSmith中的SchemaExplorer.MySQLSchemaProvider
  7. 题解【黑匣子_NOI导刊2010提高(06)】(洛谷P1801)
  8. es查询大文本效率_es之路由:进一步提高Elasticsearch的检索效率(适用大规模数据集)...
  9. gwt前台开发_为GWT设置开发环境
  10. 高速公路坐标高程计算软件3.3版本发布
  11. 《Python金融大数据风控建模实战》 第5章 变量编码方法
  12. 一个人最顶级的修养,不与烂人烂事纠缠
  13. 淘宝直通车什么情况能退款?怎么退?
  14. 比亚乔-截至2020年5月,全球两轮车销量同比下降21%
  15. 教你一招:Word中的文字转换成表格,把表格转换成文字
  16. 高级产品经理十八种能力
  17. Linux虚拟机命令行联网
  18. Oracle中计算年龄SQL语句
  19. MIT6.824_2021_学习总结 分布式常见知识点
  20. C语言——字符串连接

热门文章

  1. python opencv多边形掩膜
  2. 'unicodeescape' codec can't decode bytes in position 16-17: malformed \N character escape
  3. mysql 分页优化
  4. Matlab 方括号“[ ]”的作用
  5. cuda测试caffe编译安装
  6. cmake ubuntu安装卸载升级
  7. Linux下的at定时执行任务命令详解
  8. 手机画面尺寸多少满屏_手机屏幕科普
  9. Linux下udp程序怎么运行,Linux下UDP的连接程序示例(阻塞、非阻塞)
  10. mac设置linux环境,如何在mac或者linux配置oh-my-zsh