Lesen * .tar.gz Datei in Python ohne zu Extrahieren

stimmen
2

In Python 3, versuche ich, Dateien zu lesen, die sie in einem tar.gz-Archiv befindet, ohne das zu Extrahieren (dh ohne die Extraktdateien auf der Festplatte zu schreiben). Ich fand das tarfile Modul, und das ist, was ich geschrieben habe (stark vereinfacht):

tar = tarfile.open('arhivename.tar.gz',encoding='utf-8')
for x in tar.getmembers():
    filelikeobject=tar.extractfile(x)
    #pass the filelikeobject to a third party function that accepts file-like object that read strings

    #the following lines are for debug:
    r=filelikeobject.read()
    print(type(r).__name__) #prints out 'bytes' - need 'str'

das Problem ist, das tar.extractfile (x) gibt ein Dateiobjekt, die Bytes zurückgibt, wenn lesen () aufrufen. Ich brauche es str mit utf-8-Kodierung zurück

Veröffentlicht am 27/11/2018 um 17:50
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Wenn Sie anrufen tarfile.open,

tarfile.open('arhivename.tar.gz', encoding='utf-8')

Der encodingParameter steuert die Codierung der Dateinamen, nicht die Codierung des Dateiinhalts. Es macht keinen Sinn für die macht encodingParameter die Codierung der Dateiinhalte zu steuern, da verschiedene Dateien in der TAR - Datei unterschiedlich codiert werden können. Also, wirklich eine TAR - Datei enthält nur binäre Daten.

Sie können durch Umwickeln Sie die Datei mit dem UTF-8 - Stream - Leser aus dem diese Daten dekodieren codecsModul:

import codecs
utf8reader = codecs.getreader('utf-8')
for name in tar.getmembers():
    fp = utf8reader(tar.extractfile(name))
Beantwortet am 27/11/2018 um 18:17
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more