Je veux créer un script pour décompresser (.tar.GZ) fichier via (Python)

j'essaye de faire un script pour défaire tout le .tar.fichiers gz à partir de dossiers dans un répertoire. Par exemple, je vais avoir un fichier qu'il appelle ( les tests.tar.gz). Puis si je le fais manuellement, je peux appuyer sur "extraire ici" puis de la .tar.fichier gz va créer un nouveau fichier, et il appelle le test.tar. Enfin, si je répète le processus d'appuyer sur "extraire ici", l' .le dossier tar me dévoile tout .les fichiers pdf.

je me demande comment je peux le faire, et j'ai mon code ici et il ne semble pas realty travail tho.

import os
import tarfile
import zipfile

def extract_file(path, to_directory='.'):
    if path.endswith('.zip'):
        opener, mode = zipfile.ZipFile, 'r'
    elif path.endswith('.tar.gz') or path.endswith('.tgz'):
        opener, mode = tarfile.open, 'r:gz'
    elif path.endswith('.tar.bz2') or path.endswith('.tbz'):
        opener, mode = tarfile.open, 'r:bz2'
    else: 
        raise ValueError, "Could not extract `%s` as no appropriate extractor is found" % path

    cwd = os.getcwd()
    os.chdir(to_directory)

    try:
        file = opener(path, mode)
        try: file.extractall()
        finally: file.close()
    finally:
        os.chdir(cwd)
20
demandé sur Delimitry 2015-06-17 12:45:41

2 réponses

Pourquoi voulez-vous" presser " deux fois pour extraire A.tar.gz, quand tu peux le faire facilement une fois? Voici un code simple pour extraire les deux .de goudron et de .tar.gz en une seule fois:

import tarfile
if (fname.endswith("tar.gz")):
    tar = tarfile.open(fname, "r:gz")
    tar.extractall()
    tar.close()
elif (fname.endswith("tar")):
    tar = tarfile.open(fname, "r:")
    tar.extractall()
    tar.close()
36
répondu Lye Heng Foo 2018-03-11 16:33:52

quand j'ai lancé votre programme, il a fonctionné parfaitement pour un goudron.gz et un .le fichier tgz, il ne m'a pas donné les bons éléments quand j'ai ouvert le zip, mais .tbz était la seule à avoir fait une erreur. Je pense que vous avez utilisé la mauvaise méthode pour décompresser un .tbz parce que l'erreur disait que j'avais un type de fichier incorrect, mais je ne l'ai pas fait. Une façon de résoudre le .zip question est pour nous de l'os.command () et décompresse-le avec une ligne de commande (en fonction de votre système d'exploitation) car il renvoie un dossier _MACOSX sans rien à l'intérieur, même bien que j'ai entré le chemin correctement. La seule autre erreur que j'ai rencontrée était que vous avez utilisé une syntaxe incorrecte pour soulever une erreur.

voici ce que vous auriez dû utiliser:

raise ValueError("Error message here")

Vous avez utilisé une virgule et pas de parenthèses. Espérons que cette aide!

0
répondu Beckett O'Brien 2018-03-11 17:25:46