lire le contenu du fichier tar sans le démêler, en script python

j'ai un fichier tar qui contient un certain nombre de fichiers. J'ai besoin d'écrire un script python qui lira le contenu des fichiers et donnera le nombre total de caractères, y compris le nombre total de lettres, d'espaces, de caractères newline, tout, sans détacher le fichier tar.

48
demandé sur randeepsp 2010-01-07 08:58:08

3 réponses

vous pouvez utiliser getmembers ()

>>> import  tarfile
>>> tar = tarfile.open("test.tar")
>>> tar.getmembers()

après cela, vous pouvez utiliser extractfile() pour extraire les membres comme objet file. Juste un exemple

import tarfile,os
import sys
os.chdir("/tmp/foo")
tar = tarfile.open("test.tar")
for member in tar.getmembers():
    f=tar.extractfile(member)
    content=f.read()
    print "%s has %d newlines" %(member, content.count("\n"))
    print "%s has %d spaces" % (member,content.count(" "))
    print "%s has %d characters" % (member, len(content))
    sys.exit()
tar.close()

avec l'objet fichier" f " dans l'exemple ci-dessus, vous pouvez utiliser read(), readlines() etc.

88
répondu ghostdog74 2016-05-27 12:39:09

vous devez utiliser le module tarfile. Plus précisément, vous utilisez une instance de la classe TarFile pour accéder au fichier, puis accéder aux noms avec TarFile.getnames ()

 |  getnames(self)
 |      Return the members of the archive as a list of their names. It has
 |      the same order as the list returned by getmembers().

si vous voulez plutôt lire le content , alors vous utilisez cette méthode

 |  extractfile(self, member)
 |      Extract a member from the archive as a file object. `member' may be
 |      a filename or a TarInfo object. If `member' is a regular file, a
 |      file-like object is returned. If `member' is a link, a file-like
 |      object is constructed from the link's target. If `member' is none of
 |      the above, None is returned.
 |      The file-like object is read-only and provides the following
 |      methods: read(), readline(), readlines(), seek() and tell()
9
répondu Stefano Borini 2010-01-07 06:01:43

une mise en œuvre des méthodes mentionnées par @stefano-borini Accédez à un membre des archives tar via le nom de fichier comme so

#python3
myFile = myArchive.extractfile( 
    dict(zip(
        myArchive.getnames(), 
        myArchive.getmembers()
    ))['path/to/file'] 
).read()`

crédits:

3
répondu ThorSummoner 2017-05-23 12:10:26