对于这些通用的解压方法,网上都有大量的介绍,这里不再赘述,直接进入正题。
tar.gz解压
import gzip
def un_gz(file_name):
"""解压gz包"""
f_name = file_name.replace(".gz", "")
#获取文件的名称,去掉
g_file = gzip.GzipFile(file_name)
#创建gzip对象
f =open(f_name, "w+").write(g_file.read())
#gzip对象用read()打开后,写入open()建立的文件里。
g_file.close()
tar解压
import tarfile
def un_tar(file_name):
"""解压tar"""
print(file_name)
tar = tarfile.open(file_name)
names = tar.getnames()
temp_file_path = ''
if os.path.isdir(file_name + "_files"):
print('文件已存在')
temp_file_path = os.path.isdir(file_name + "_files")
else:
temp_file_path = os.mkdir(file_name + "_files")
print('创建一个新的文件名')
#因为解压后是很多文件,预先建立同名目录
for name in names:
tar.extract(name, file_name + "_files/")
tar.close()
return temp_file_path
zip解压
import zipfile
def un_zip(file_name):
"""解压zip"""
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解压
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")
if os.chdir(file_name + "_files"):
rar.extractall()
rar.close()
以上的就是解压的方法,以下会进入实例
# 压缩包文件路径
rar_file_path = "/Users/mac/Desktop/登录日志/finally/"
for dirpath, dirnames, filenames in os.walk(rar_file_path):
for filepath in filenames:
gz_file_path = os.path.join(dirpath, filepath)
# tar_gz_helper 是解压方法的封装类名,方便调用
tar_gz_helper.un_tar(gz_file_path)
按照上述方法对压缩包解压后,是没有问题的,但是有时候我们的需求并不是为了仅仅是解压,而是为了解压文件后子目录下的文件内容,那此时就需要再次遍历一次,而Mac解压文件后会默认生成一个.DS_Store文件,如果你还是使用我的这个方法进行再次遍历,就会出现问题,需要判断路径的后缀是DS_Store,直接pass掉,避免对DS_Store文件处理报错的问题。
if gz_file_path.endswith('DS_Store'):
pass
if gz_file_path.endswith('.tar.gz'):
# 读取文件路径,开始进行解压操作
tar_gz_helper.un_tar(gz_file_path)
路很长,没人赶你走,但你不得不走。