Python解压五种常见压缩包格式(.gz, .tar, .tgz, .zip, .rar)实战指南
本文详细介绍Python中处理五种常见压缩文件格式的方法,包括.gz、.tar、.tgz、.zip和.rar。文章通过具体代码示例,演示如何利用Python内置模块及rarfile第三方库实现文件的解压与打包,涵盖从基础概念到实际操作的完整流程,帮助开发者高效处理不同格式的压缩文件。
本文主要探讨如何利用Python解压以下五种类型的压缩文件:
.gz、.tar、.tgz、.zip 以及 .rar
基本概念简介
.gz格式:即gzip,通常仅用于压缩单个文件。若需处理多个文件,需先与tar工具结合,实现先打包后压缩的效果。
.tar格式:这是Linux系统下的标准打包工具,仅执行打包操作,不进行压缩。
.tgz格式:即tar.gz格式。其处理流程是先使用tar进行打包,随后再使用gzip对生成的tar文件进行压缩。
.zip格式:与gzip算法类似,但支持打包并压缩多个文件。需要注意的是,zip是对每个文件分别压缩,其整体压缩率通常低于tar打包后再压缩的效果。
.rar格式:一种用于打包和压缩文件的格式,最初设计用于DOS系统,后广泛应用于Windows操作系统。
相较于zip,rar格式具有更高的压缩率,但解压速度较慢,且随机访问文件的效率也较低。
关于zip与rar格式的详细对比,可参考以下链接:
http://www.comicer.com/stronghorse/water/software/ziprar.htm
gz格式处理
由于gz通常只压缩单个文件,因此常与其他打包工具配合使用。例如,可先使用tar将多个文件打包为XXX.tar,然后再使用gzip将其压缩为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文件,还需进一步解压该tar文件以获取原始内容。
*注:tgz与tar.gz实质上是同一种格式。在早期DOS系统中,扩展名限制为三个字符,因此使用tgz作为缩写。
由于tar文件内包含多个文件,我们需要先读取所有文件名,然后逐一解压。具体实现如下:
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类似,zip解压时也是先读取多个文件名,然后进行解压。具体代码如下:
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格式主要在Windows环境下使用,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()添加文件,会保留文件的完整路径。若希望按照自定义命名规则将文件加入tar包,需使用arcname参数指定归档名称。
打包代码示例如下:
#!/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与对应动作说明
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实现rar文件解压
1. 通过pip3 install rarfile 命令安装rarfile库。
(注意:此处仅涉及解压操作,该库不支持压缩rar文件)。
#coding=utf-8 import rarfile path = "E:\\New\\New.rar" path2 = "E:\\New" rf = rarfile.RarFile(path) #待解压文件 rf.extractall(path2) #解压指定文件路径
总结
以上介绍了Python解压五种常见压缩包格式的方法,希望能对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持! 如果觉得本文对您有帮助,欢迎转载,请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









