2017-04-03 1 views
1

Ich habe ein TARFILE-Objekt mit ein paar Dateien darin, einer davon heißt ffb.json. Ich habe versucht, die folgenden, um diese JSON-String zu extrahieren,wie TAR-Dateiobjekt in Zeichenfolge zu konvertieren

with tarfile.open(mode="r:gz", fileobj=StringIO.StringIO(p.results)) as tar: 
    for tarinfo in tar: 
     print tarinfo.name 
     if tarinfo.name == './ffb.json': 
      print tarinfo.tobuf() 

Allerdings ist die print tarinfo.tobuf() nicht drucken, was ich erwartet hatte: ./ffb.json0000644000000000000000000000054313070524150012600 0ustar rootroot00000000000000

Wenn ich die ffb.json von Hand extrahieren, hat es in der Tat legitim JSON-String drin.

Antwort

1

Wie in der documentation für tarfile erwähnt, enthält TarInfo nur Datei-Metadaten - „Es tut nicht die Daten der Datei selbst enthalten.“

Glücklicherweise können Sie das TarInfo Objekt wieder in TarFile.extractfile(member) passieren, um den Inhalt der Datei als Datei-ähnliches Objekt zu erhalten (die Sie anschließend .read() die rohen Inhalt zu bekommen). Zum Beispiel: print tar.extractfile(tarinfo).read().

Alternativ können Sie einfach die foreach-Schleife überspringen und TarFile.extractfile(member) mit dem Dateinamen direkt aufrufen (z. B. print tar.extractfile("./ffb.json").read()).

Verwandte Themen