Décompressez plusieurs fichiers compressés (Python)

Aperçu

Afin de lancer le jeu avec un émulateur appelé Redream, j'ai dû décompresser le fichier compressé pour chaque répertoire, j'ai donc créé un lot.

Pré-travail

Installez le package pour décompresser le fichier 7z. Installez 7z avec la commande suivante.

sudo apt-get install -y p7zip-full

Code Python

Créez le code Python suivant et enregistrez-le dans le fichier 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)
                                 

Description du code Python

Je n'ai pas écrit de commentaire sur la source, alors j'aimerais l'expliquer ici.

#!/usr/bin/python
# -*- coding: utf-8 -*-
#C'est la partie qui déclare le package car il utilise la méthode fournie.
import io
import os
import glob

#Enregistrez uniquement les fichiers avec l'extension "7z" dans le répertoire actuel dans le tableau.
arr = glob.glob("*7z")

#L'impression suivante est le code pour vérifier le contenu de la matrice enregistrée.
# print(arr)

#Décompressez et supprimez les fichiers compressés dans des fichiers de script shell
#Spécifie le nom du fichier de script shell dans lequel la commande est enregistrée.
path_w = '7z.sh'

#Ouvrez le fichier de script shell en mode écriture
with open(path_w, mode='w') as f:

    #Créez une commande de décompression / suppression pour chaque fichier "7z".
    for str in arr:

        #Créez le nom du répertoire à décompresser à partir du nom du fichier compressé.
        #Supprimez les chaînes de caractères inutiles dans le nom du répertoire.
        dir = str.replace("[GDI] ","").replace("[CDI] ","").replace(".7z","").replace("'","")

        #Si le nom de fichier et le nom de répertoire ont les chaînes de caractères suivantes, la réponse échouera.
        #Supprimez le caractère. Et remplacez également le nom du fichier.
        tmpstr = str.replace("'","").replace(",","")
        os.rename("./" + str , "./" + tmpstr)
        try:

            #Si le nom du répertoire n'existe pas, effectuez le traitement suivant.
            if not os.path.exists(dir):

                #Cette commande décompresse le fichier compressé.
                cmds = "7z x '" + tmpstr + "' -o'" + dir + "'\n"

                #Cette commande supprime le fichier décompressé.
                dels = "rm -rf '" + tmpstr + "'\n"

                #C'est le code pour confirmer la commande.
                #print(cmds)
                #print(dels)

                #Enregistrez la commande dans un fichier de script shell.
                f.write(cmds)
                f.write(dels)

        except OSError:
            #Sortie lorsqu'une erreur liée au répertoire se produit.
            print("Error: " + dir)

Exécuter du code Python

Exécutez le code Python avec la commande suivante: Une fois exécuté, un fichier "7z.sh" sera généré.

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

Vérifiez le contenu du fichier 7z.sh

Vérifiez le contenu du fichier avec la commande suivante. Vous pouvez voir que la commande de décompression / suppression est générée pour chaque nom de fichier compressé.

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'

Exécutez la commande 7z.sh

Exécutez le fichier de script shell avec la commande suivante: Une fois exécuté, l'écran de décompression du fichier compressé s'affiche. Lorsque l'exécution est terminée, vous pouvez voir que tous les fichiers compressés ont été supprimés. S'il est possible que le nom de fichier soit arrêté en raison d'une erreur de chaîne de caractères inattendue, Dans ce cas, ajoutez un remplacement au traitement du nom de fichier / nom de répertoire. Ensuite, vous devriez pouvoir le résoudre sans aucun problème.

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

Autre

Si la capacité de la carte SD est insuffisante, la décompression du fichier peut échouer, donc Faites attention. (Lol)

À la fin

Avec cela, il était facile de mettre le jeu dans Retropie OS, Ensuite, la spécification de GDI / CDI et le fichier image de prévisualisation restent dans game.xml. Lors de l'exécution sur Raspbian, il n'est pas nécessaire de spécifier le game.xml ci-dessus. Il était difficile de compresser et de décompresser manuellement, alors je l'ai fait. Cela a-t-il été utile? La gestion des exceptions fait un peu défaut, mais veuillez l'ajouter si nécessaire.

Recommended Posts

Décompressez plusieurs fichiers compressés (Python)
Combinez plusieurs fichiers python en un seul fichier python
[Python & Unix] Combinez plusieurs fichiers PDF en un seul.
Convertissez plusieurs fichiers proto à la fois avec python
[python] Compresser et décompresser
[Python] Créer plusieurs répertoires
Python - Marquage des fichiers MP3
[Python] Lecture de fichiers CSV
Supprimer les en-têtes de fichiers CSV à plusieurs formats avec python
Expression de régression multiple en Python
[Python] Envoyer gmail avec python: envoyez un par un avec plusieurs fichiers image en pièce jointe
[R] [Python] Memo pour lire plusieurs fichiers csv dans plusieurs fichiers zip
Spécifier plusieurs index de liste (Python)
Tri des fichiers image avec Python (2)
Trier de gros fichiers avec python
Tri des fichiers image avec Python (3)
Installer plusieurs versions de Python
Tri des fichiers image avec Python
Intégrez des fichiers PDF avec Python
Lire des fichiers .txt avec Python
Évitez les boucles multiples en Python
Télécharger plusieurs fichiers avec Flask
Extraire plusieurs doublons de liste en Python
Translocation de fichiers CSV avec Python Partie 1
[ev3dev × Python] Contrôle de plusieurs moteurs
[Python] Afficher plusieurs fenêtres avec Tkinter
[Python] Chargement de fichiers csv à l'aide de pandas
[Blender] Scinder le script Blender en plusieurs fichiers
Manipulation des fichiers EAGLE .brd avec Python
Charger plusieurs fichiers JavaScript avec PyWebView
Manipuler des fichiers et des dossiers en Python
[Python] Fichiers wav POST avec requêtes [POST]
Lire et utiliser des fichiers Python à partir de Python
Gestion des fichiers JSON en Python
Téléchargez des fichiers Google Drive en Python
Décrypter les fichiers cryptés avec OpenSSL avec Python 3
Publiez plusieurs images Twitter avec python
Trier les gros fichiers texte en Python
Animez plusieurs images fixes avec Python
Fichiers liés au système d'exploitation Python, opérations de sous-répertoire
Gérer les fichiers Excel CSV avec Python
Lire des fichiers en parallèle avec Python
Test statistique (test multiple) en Python: scikit_posthocs
Exporter et exporter des fichiers en Python
Intégration multiple avec Python et Sympy
Supprimer plusieurs éléments dans la liste python
[Python] Création de plusieurs fenêtres avec Tkinter
Tri des fichiers par convention de dénomination à l'aide de Python
Extraire des chaînes de fichiers avec Python