python压缩文件夹下的所有文件_python压缩文件夹内所有文件为zip文件的方法
这里讨论使用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文件的方法相关推荐
- python遍历一个文件夹下所有excel,读取所有sheet页,然后写入另一个文件夹下对应模板的excel中
本来想直接写入,但是我们的excel报表太麻烦了,里面表头有多处要求合并的,用python去写太要命了,想了下,设置一堆空的excel模板,这样只需要把原文件的数据读出来就可以了,简单多了 #读取文件 ...
- vue中src文件夹下各文件_Win10下与虚拟机中的linux共享文件夹
Win10主机和Vmware linux共享文件夹 1.首先确保虚拟机中的linux能ping通主机,证明虚拟机是可以访问到的主机的(这个不会可百度) 2.右击你想要共享的文件夹选择'属性',点击'共 ...
- python selenium 获取元素下的元素个数_Python + Selenium,分分钟搭建 Web 自动化框架!(送自动化测试书籍)...
前言 在程序员的世界中,一切重复性的工作,都应该通过程序自动执行.「自动化测试」就是一个最好的例子.随着互联网应用开发周期越来越短,迭代速度越来越快,只会点点点,不懂开发的手工测试,已经无法满足如今的 ...
- python读取二维数组的行列数_Python获取二维数组的行列数的2种方法
Python获取二维数组的行列数的2种方法 这篇文章主要介绍了Python获取二维数组的行列数的2种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考 ...
- python迁移到另一台电脑上网_Python虚拟环境导出包安装到另一台电脑的方法
环境:Windows 版 Python Python 3.6.8可以用自带的命令建立虚拟环境,不用安装另外的如 virtualenv.virtualenvwrapper等工具. python -m v ...
- python更改数据框指定位置的数据_python – 更改数据框中多个loc的最快方法
我有一个包含100万行的pandas数据帧.我想用另一组值替换列中900,000行的值.有没有for循环(我需要两天才能完成)的快速方法吗? 例如,查看此示例数据框,其中我已将100万行压缩为8行 i ...
- python字典的键可以用列表吗_python字典多键值及重复键值的使用方法(详解)
在Python中使用字典,格式如下: dict={ key1:value1 , key2;value2 ...} 在实际访问字典值时的使用格式如下: dict[key] 多键值 字典的多键值形式如下: ...
- python将二维数组转换为一维数组_python的set处理二维数组转一维数组的方法示例...
for splitValue in set(dataset[:, featureIndex].tolist()): 首先set是一个无序,无重复的数据结构,所以很多时候使用它来进行去重:但是set接收 ...
- python统计列表中数字出现的次数_Python实现统计给定列表中指定数字出现次数的方法...
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 如何使用uglify-js压缩指定文件夹下的js代码
前言 客户来了需求:想使用公司的组件包,但组件包的源码不能对其开放,该怎么做呢? 发布后的组件包目录结构如下图所示: 其中,es文件夹下的js代码皆为esm(ES Module)模块 lib文件夹下的 ...
最新文章
- CUDA编程遇到的问题
- 代码洁癖的春天!Java 效率工具之 Lombok
- Objective-C @property和@synthesize
- 《中国人工智能学会通讯》——10.22 能源互联网时代
- JAVA设计模式详解(六)----------状态模式
- 修改CodeSmith中的SchemaExplorer.MySQLSchemaProvider
- 题解【黑匣子_NOI导刊2010提高(06)】(洛谷P1801)
- es查询大文本效率_es之路由:进一步提高Elasticsearch的检索效率(适用大规模数据集)...
- gwt前台开发_为GWT设置开发环境
- 高速公路坐标高程计算软件3.3版本发布
- 《Python金融大数据风控建模实战》 第5章 变量编码方法
- 一个人最顶级的修养,不与烂人烂事纠缠
- 淘宝直通车什么情况能退款?怎么退?
- 比亚乔-截至2020年5月,全球两轮车销量同比下降21%
- 教你一招:Word中的文字转换成表格,把表格转换成文字
- 高级产品经理十八种能力
- Linux虚拟机命令行联网
- Oracle中计算年龄SQL语句
- MIT6.824_2021_学习总结 分布式常见知识点
- C语言——字符串连接
热门文章
- python opencv多边形掩膜
- 'unicodeescape' codec can't decode bytes in position 16-17: malformed \N character escape
- mysql 分页优化
- Matlab 方括号“[ ]”的作用
- cuda测试caffe编译安装
- cmake ubuntu安装卸载升级
- Linux下的at定时执行任务命令详解
- 手机画面尺寸多少满屏_手机屏幕科普
- Linux下udp程序怎么运行,Linux下UDP的连接程序示例(阻塞、非阻塞)
- mac设置linux环境,如何在mac或者linux配置oh-my-zsh