Číst * .tar.gz soubor v pythonu bez extrakce

hlasů
2

V Pythonu 3, Snažím se číst, který se nachází v archivu tar.gz. bez rozbalování (to znamená bez nutnosti psaní soubory extrahovat na disk). Zjistil jsem, modul tarfile, a to je to, co jsem napsal (hodně zjednodušený):

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'

Problém je, tím tar.extractfile (x) vrací objekt soubor, který vrací bajty při volání read (). Musím to vrátit str pomocí kódování UTF-8

Položena 27/11/2018 v 17:50
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
2

Voláte-li tarfile.open,

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

encodingParametr určuje kódování názvů souborů, ne kódování obsahu souboru. To nedává smysl pro encodingparametr pro kontrolu kódování obsahu souboru, protože různé soubory uvnitř souboru tar mohou být kódovány odlišně. Takže soubor tar opravdu jen obsahuje binární data.

Můžete dekódovat tyto údaje tím, že balí soubor s proudem čtečkou UTF-8 z codecsmodulu:

import codecs
utf8reader = codecs.getreader('utf-8')
for name in tar.getmembers():
    fp = utf8reader(tar.extractfile(name))
Odpovězeno 27/11/2018 v 18:17
zdroj uživatelem

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