[python] Batch-Dekomprimierung aller komprimierten Pakete (rar, zip, 7z) im Ordner

        Wenn die Ordnerfunktion viele komprimierte Pakete enthält, ist das Dekomprimieren zeitaufwändig und mühsam, insbesondere wenn verschachtelte Ordner vorhanden sind, ist das Dekomprimieren noch schwieriger. Franpper stellt Ihnen heute eine Methode vor, mit der Sie alle Dateien und Ordner unter dem angegebenen Pfad rekursiv durchsuchen und alle komprimierten Pakete stapelweise dekomprimieren können, sodass Sie die Dekomprimierung mit einem Klick durchführen können.

        Zu den gängigen Komprimierungspaketformaten gehören rar, zip und 7z. Franpper schreibt die Dekomprimierungsmethoden dieser Dateitypen in die Methode. Nehmen wir 7z als Beispiel, um es im Detail vorzustellen. Siehe unten im vollständigen Code.

Inhaltsverzeichnis

1. Code-Einführung

2. Angelegenheiten, die Aufmerksamkeit erfordern

3. Vollständiger Code


1. Code-Einführung

        Die erste ist die Funktion mkdir, mit der ein neuer Ordner zum Speichern dekomprimierter Dateien erstellt wird.

def mkdir(path):
    isExists = os.path.exists(path)
    if not isExists:
        os.makedirs(path)
        print(path + '创建成功')
    else:
        print(path + '目录已存在')

         Generieren Sie die Protokolldatei unzip_log.txt, um den Pfad der Datei aufzuzeichnen, deren Dekomprimierung fehlgeschlagen ist. Diese Dateien müssen manuell dekomprimiert werden.

 wrong_log = os.path.join(folder_path, 'unzip_log.txt')

         Rufen Sie beim rekursiven Durchlaufen von Ordnern die Namen aller Ordner im Ordner ab. Wenn der Name des komprimierten Pakets mit dem Namen des Ordners im selben Verzeichnis übereinstimmt (falls vorhanden), gilt es als dekomprimiert und wird auch dekomprimiert nicht dekomprimiert werden.

contents = os.listdir(root)
folders = [folder for folder in contents if os.path.isdir(os.path.join(root, folder))]

         Damit die Datei dekomprimiert werden kann, besorgen Sie sich ihren Namen und erstellen Sie einen Ordner.

 zipFile_name = file.split('.')[0:-1]
 zipFile_name = '.'.join(zipFile_name)

         Führen Sie als Nächstes den Dekomprimierungsvorgang durch:

with py7zr.SevenZipFile(zipFile_path, mode='r') as z:
    z.extractall(path=unzip_zipFile_path)

        Der Pfad der Datei, deren Dekomprimierung fehlgeschlagen ist, wird im Protokoll aufgezeichnet:

with open(wrong_log, 'a') as f:
    f.write(f'\n {zipFile_path}')

 2. Angelegenheiten, die Aufmerksamkeit erfordern

        was man beachten muss ist:

        1) Wenn Sie rarfile zum Dekomprimieren der rar-Datei verwenden, schlägt die Dekomprimierung fehl. Sie müssen UnRAR.exe im Winrar-Verzeichnis in das Python-Skriptverzeichnis kopieren. Wie nachfolgend dargestellt:

        2) Wenn Sie Zipfile zum Komprimieren der Zip-Datei verwenden, enthält die dekomprimierte Datei verstümmelte Zeichen. Sie müssen die beiden Stellen in der Datei zipfile.py ändern, wie in der folgenden Abbildung gezeigt.

3. Vollständiger Code


import os
import zipfile
import rarfile
import py7zr
"""
解压文件
"""


def mkdir(path):
    isExists = os.path.exists(path)
    if not isExists:
        os.makedirs(path)
        print(path + '创建成功')
    else:
        print(path + '目录已存在')


def unzipFile(folder_path):
    wrong_log = os.path.join(folder_path, 'unzip_log.txt')
    for root, dirs, files in os.walk(folder_path):
        contents = os.listdir(root)
        folders = [folder for folder in contents if os.path.isdir(os.path.join(root, folder))]  # 该目录下文件夹名称列表
        for file in files:
            if file.endswith('7z'):
                zipFile_name = file.split('.')[0:-1]
                zipFile_name = '.'.join(zipFile_name)
                if zipFile_name in folders:
                    continue
                # 没有重名文件则进行解压
                else:
                    # 创建解压文件夹路径
                    unzip_zipFile_path = os.path.join(root, zipFile_name)
                    mkdir(unzip_zipFile_path)
                    zipFile_path = os.path.join(root, file)
                    print(zipFile_path)
                    try:
                        with py7zr.SevenZipFile(zipFile_path, mode='r') as z:
                            z.extractall(path=unzip_zipFile_path)
                    except:
                        with open(wrong_log, 'a') as f:
                            f.write(f'\n {zipFile_path}')

            elif file.endswith('rar'):  # file 是待解压文件
                # 有重名文件说明被解压过,跳过
                rarFile_name = file.split('.')[0:-1]
                rarFile_name = '.'.join(rarFile_name)
                if rarFile_name in folders:
                    continue
                # 没有重名文件则进行解压
                else:
                    # 创建解压文件夹路径
                    unzip_rarFile_path = os.path.join(root, rarFile_name)
                    mkdir(unzip_rarFile_path)
                    rarFile_path = os.path.join(root, file)
                    print(rarFile_path)
                    try:
                        with rarfile.RarFile(rarFile_path) as rar_ref:
                            rar_ref.extractall(unzip_rarFile_path)
                    except:
                        pass
                        with open(wrong_log, 'a') as f:
                            f.write(f'\n {rarFile_path}')

            elif file.endswith('zip'):  # file 是待解压文件
                # 有重名文件说明被解压过,跳过
                rarFile_name = file.split('.')[0:-1]
                rarFile_name = '.'.join(rarFile_name)
                if rarFile_name in folders:
                    continue
                # 没有重名文件则进行解压
                else:
                    # 创建解压文件夹路径
                    unzip_rarFile_path = os.path.join(root, rarFile_name)
                    mkdir(unzip_rarFile_path)
                    rarFile_path = os.path.join(root, file)
                    print(rarFile_path)
                    try:
                        with zipfile.ZipFile(rarFile_path, 'r') as zip_ref:
                            zip_ref.extractall(unzip_rarFile_path)
                    except:
                        with open(wrong_log, 'a') as f:
                            f.write(f'\n {rarFile_path}')
            else:
                continue


unzipFile(r"G:\work\")

Supongo que te gusta

Origin blog.csdn.net/weixin_58283091/article/details/130988374
Recomendado
Clasificación