python tar.gz、tar、zip、rar文件解压

对于这些通用的解压方法,网上都有大量的介绍,这里不再赘述,直接进入正题。

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)

路很长,没人赶你走,但你不得不走。

 

 

你可能感兴趣的:(Python)