Entpacke mehrere komprimierte Dateien (Python)

Überblick

Um das Spiel mit einem Emulator namens Redream auszuführen, musste ich die komprimierte Datei für jedes Verzeichnis dekomprimieren, also habe ich einen Stapel erstellt.

Vor der Arbeit

Installieren Sie das Paket, um die 7z-Datei zu entpacken. Installieren Sie 7z mit dem folgenden Befehl.

sudo apt-get install -y p7zip-full

Python-Code

Erstellen Sie den folgenden Python-Code und speichern Sie ihn in der Datei batch.py.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import io
import os
import glob

arr = glob.glob("*7z")
#print(arr)
path_w = '7z.sh'
with open(path_w, mode='w') as f:
    for str in arr:
        dir = str.replace("[GDI] ","").replace("[CDI] ","").replace(".7z","").replace("'","")
        tmpstr = str.replace("'","").replace(",","")
        os.rename("./" + str , "./" + tmpstr)
        try:
            if not os.path.exists(dir):
                cmds = "7z x '" + tmpstr + "' -o'" + dir + "'\n"
                dels = "rm -rf '" + tmpstr + "'\n"
                #print(cmds)
                #print(dels)
                f.write(cmds)
                f.write(dels)
        except OSError:
            print("Error: " + dir)
                                 

Python-Codebeschreibung

Ich habe keinen Kommentar zur Quelle geschrieben, deshalb möchte ich ihn hier erklären.

#!/usr/bin/python
# -*- coding: utf-8 -*-
#Dies ist der Teil, der das Paket deklariert, da er die bereitgestellte Methode verwendet.
import io
import os
import glob

#Speichern Sie nur Dateien mit der Erweiterung "7z" im aktuellen Verzeichnis im Array.
arr = glob.glob("*7z")

#Der folgende Ausdruck ist der Code zum Überprüfen des Inhalts des gespeicherten Arrays.
# print(arr)

#Entpacken und löschen Sie komprimierte Dateien in Shell-Skriptdateien
#Gibt den Namen der Shell-Skriptdatei an, in der der Befehl gespeichert wird.
path_w = '7z.sh'

#Öffnen Sie die Shell-Skriptdatei, um den Schreibmodus zu aktivieren
with open(path_w, mode='w') as f:

    #Erstellen Sie für jede "7z" -Datei einen Dekomprimierungs- / Löschbefehl.
    for str in arr:

        #Erstellen Sie den zu dekomprimierenden Verzeichnisnamen aus dem komprimierten Dateinamen.
        #Löschen Sie unnötige Zeichenfolgen im Verzeichnisnamen.
        dir = str.replace("[GDI] ","").replace("[CDI] ","").replace(".7z","").replace("'","")

        #Wenn der Dateiname und der Verzeichnisname die folgenden Zeichenfolgen haben, schlägt die Antwort fehl.
        #Löschen Sie das Zeichen. Und ersetzen Sie auch den Dateinamen.
        tmpstr = str.replace("'","").replace(",","")
        os.rename("./" + str , "./" + tmpstr)
        try:

            #Wenn der Verzeichnisname nicht vorhanden ist, führen Sie die folgende Verarbeitung durch.
            if not os.path.exists(dir):

                #Dieser Befehl dekomprimiert die komprimierte Datei.
                cmds = "7z x '" + tmpstr + "' -o'" + dir + "'\n"

                #Dieser Befehl löscht die entpackte Datei.
                dels = "rm -rf '" + tmpstr + "'\n"

                #Dies ist der Code zur Bestätigung des Befehls.
                #print(cmds)
                #print(dels)

                #Speichern Sie den Befehl in einer Shell-Skriptdatei.
                f.write(cmds)
                f.write(dels)

        except OSError:
            #Ausgabe, wenn ein verzeichnisbezogener Fehler auftritt.
            print("Error: " + dir)

Führen Sie Python-Code aus

Führen Sie den Python-Code mit dem folgenden Befehl aus: Bei der Ausführung wird eine "7z.sh" -Datei generiert.

pi@raspberrypi:~/Downloads/redream/rom $ python batch.py

Überprüfen Sie den Inhalt der Datei 7z.sh.

Überprüfen Sie den Inhalt der Datei mit dem folgenden Befehl. Sie können sehen, dass der Dekomprimierungs- / Löschbefehl für jeden komprimierten Dateinamen generiert wird.

pi@raspberrypi:~/Downloads/redream/rom $ cat 7z.sh
7z x '[GDI] XXXXXXXX.7z' -o'XXXXXXXX'
rm -rf '[GDI] XXXXXXXX.7z'
7z x '[CDI] XXXXXXXX.7z' -o'XXXXXXXX'
rm -rf '[CDI] XXXXXXXX.7z'

Führen Sie den Befehl 7z.sh aus

Führen Sie die Shell-Skriptdatei mit dem folgenden Befehl aus: Bei der Ausführung wird der Bildschirm zum Dekomprimieren der komprimierten Datei angezeigt. Wenn die Ausführung abgeschlossen ist, können Sie sehen, dass alle komprimierten Dateien gelöscht wurden. Wenn es möglich ist, dass der Dateiname aufgrund eines unerwarteten Zeichenfolgenfehlers gestoppt wird, Fügen Sie in diesem Fall der Verarbeitung des Dateinamens / Verzeichnisnamens einen Ersatz hinzu. Dann sollten Sie es problemlos lösen können.

pi@raspberrypi:~/Downloads/redream/rom $ sh 7z.sh

Andere

Wenn auf der SD-Karte nicht genügend Speicherplatz vorhanden ist, schlägt die Dekomprimierung der Datei möglicherweise fehl. Achtung. (Lol)

Am Ende

Damit war es einfach, das Spiel in Retropie OS zu integrieren. Als nächstes bleibt die Spezifikation der GDI / CDI- und Vorschaubilddatei in game.xml. Wenn Sie auf Raspbian ausgeführt werden, müssen Sie die obige game.xml nicht angeben. Es war mühsam, manuell zu komprimieren und zu dekomprimieren, also habe ich es geschafft. War es nützlich? Die Ausnahmebehandlung ist etwas mangelhaft, aber bitte fügen Sie sie bei Bedarf hinzu.

Recommended Posts

Entpacke mehrere komprimierte Dateien (Python)
Kombinieren Sie mehrere Python-Dateien zu einer Python-Datei
[Python & Unix] Kombinieren Sie mehrere PDF-Dateien zu einer.
Konvertieren Sie mehrere Protodateien gleichzeitig mit Python
[Python] Komprimieren und dekomprimieren
[Python] Erstellen Sie mehrere Verzeichnisse
Python - MP3-Dateien markieren
[Python] CSV-Dateien lesen
Entfernen Sie Überschriften aus CSV-Dateien mit mehreren Formaten mit Python
Mehrfacher Regressionsausdruck in Python
[Python] Google Mail mit Python senden: Senden Sie eins nach dem anderen mit mehreren angehängten Bilddateien
[R] [Python] Memo zum Lesen mehrerer CSV-Dateien in mehreren Zip-Dateien
Geben Sie mehrere Listenindizes an (Python)
Sortieren von Bilddateien mit Python (2)
Sortieren Sie große Dateien mit Python
Sortieren von Bilddateien mit Python (3)
Installieren Sie mehrere Versionen von Python
Bilddateien mit Python sortieren
Integrieren Sie PDF-Dateien in Python
TXT-Dateien mit Python lesen
Vermeiden Sie mehrere Schleifen in Python
Hochladen mehrerer Dateien mit Flask
Extrahieren Sie mehrere Listenduplikate in Python
Verschieben von CSV-Dateien mit Python Teil 1
[ev3dev × Python] Steuerung mehrerer Motoren
[Python] Mit Tkinter mehrere Fenster anzeigen
[Python] Laden von CSV-Dateien mit Pandas
[Blender] Teilen Sie das Blender-Skript in mehrere Dateien auf
Bearbeiten von EAGLE .brd-Dateien mit Python
Laden Sie mehrere JavaScript-Dateien mit PyWebView
Bearbeiten Sie Dateien und Ordner in Python
[Python] POST-WAV-Dateien mit Anforderungen [POST]
Lesen und verwenden Sie Python-Dateien aus Python
Umgang mit JSON-Dateien in Python
Laden Sie Google Drive-Dateien in Python herunter
Mit OpenSSL mit Python 3 verschlüsselte Dateien entschlüsseln
Veröffentlichen Sie mehrere Twitter-Bilder mit Python
Sortieren Sie große Textdateien in Python
Animieren Sie mehrere Standbilder mit Python
Python-Betriebssystemdateien, Unterverzeichnisoperationen
Behandeln Sie Excel-CSV-Dateien mit Python
Lesen Sie Dateien parallel zu Python
Statistischer Test (Mehrfachtest) in Python: scikit_posthocs
Exportieren und Ausgeben von Dateien in Python
Mehrfachintegration mit Python und Sympy
Löschen Sie mehrere Elemente in der Python-Liste
[Python] Erstellen mehrerer Fenster mit Tkinter
Sortieren von Dateien nach Namenskonvention mit Python
Extrahieren Sie mit Python Zeichenfolgen aus Dateien