python 实现tar文件压缩解压的实例详解
这里讨论使用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文件压缩解压的实例详解相关推荐
- python压缩文件tar_python 实现tar文件压缩解压的实例详解
python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...
- linux为什么用tar压缩,linux下tar压缩和解压命令用法详解
linux下tar压缩和解压命令用法详解 2017-03-25 14:06 分享人:老牛 将/usr/local/test目录下所有文件仅打包,不压缩到 /usr/local/auto_bak/目下 ...
- java 输入流可以合并吗_Java 使用IO流实现大文件的分割与合并实例详解
java 使用IO流实现大文件的分割与合并 文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时 ...
- java文件流 m.jb51.net_FasfDFS整合Java实现文件上传下载功能实例详解
今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 org.c ...
- python url解码_对python中url参数编码与解码的实例详解
一.简介 在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码. 二.关键代码 1.url编码 对字符串编码用urllib.parse包下的quote(string, saf ...
- python中label有什么用_对Python中TKinter模块中的Label组件实例详解
Python2.7.4 OS-W7x86 1. 简介 Label用于在指定的窗口中显示文本和图像.最终呈现出的Label是由背景和前景叠加构成的内容. Label组件定义函数:Label(master ...
- pythonfor循环案例教程_python开发之for循环操作实例详解,pythonfor实例详解
python开发之for循环操作实例详解,pythonfor实例详解 本文实例讲述了python开发之for循环操作.分享给大家供大家参考,具体如下: 下面是我做的一些学习记录供大家参考: #基本的f ...
- mysql——解压版安装详解
一.引言 原来一直用sqlserver.oracle数据库了,mysql数据库还是用着比较方便,轻量级,虽然没有sqlite轻,功能还是比较强大的.用过win安装版,但是装了一堆东西(workbenc ...
- 怎么创建python django项目_创建Django项目图文实例详解
本文实例讲述了创建Django项目的方法.分享给大家供大家参考,具体如下: 创建Django项目 创建一个HelloDjango项目 GitHub地址:https://github.com/liang ...
最新文章
- LeetCode简单题之“气球” 的最大数量
- 计算机编程课程顺序_您可以在6月开始参加630项免费的在线编程和计算机科学课程...
- Linux下时间戳格式和标准时间格式的转换
- Spring多线程批量发送邮件(ThreadPoolTaskExecutor)
- [恢]hdu 2021
- 转-WSGI Tutorial
- 仿MIUI音量变化环形进度条实现
- 【转载】关于.NET下开源及商业图像处理(PSD)组件
- 在IFC标准模型如何实现室内灯光管控?
- 如何美化CheckBox
- mysql多条语句union_Mysql同时执行多个select语句——union
- mysql5.7架设征途服务器,征途服务端架设详细教程
- Reflex仓库管理系统(WMS)简介
- amCharts 5.2.31 Crack
- ftp软件绿色版,四款好用的绿色版ftp软件
- redis | 二、redis安装
- peel在Linux生成excel,如何将多个Excel文件合并成一个且保留原有数据?
- javascript学习笔记下篇--浏览器对象
- 视频播放器 影音播放器PotPlayer v1.7.17891 绿色无广告版
- 航空公司大数据建设的思考
热门文章
- 在Java中,以下数据类型中,需要内存最多的是()
- 中国印刷业目前发展的四大主要特点
- Solrj demo
- Android5.1 修改距离感应的阈值
- Reading:一款不错的Material Desgin风格的Kotlin版本的开源APP
- MyBatis 分页插件
- unity Android平台最佳效果探索(二)
- nn.MultiheadAttention
- ExoPlayer播放器在瑞芯微rk3228CPU播放H264编码格式1080P媒体资源编解码器解码失败问题
- Hadoop生态系统(HDFS、ZooKeeper、MapRuduce、Pig....)