Прочитайте * .tar.gz файл в Python без распаковки - PullRequest
0 голосов
/ 27 ноября 2018

В python 3 я пытаюсь читать файлы, находящиеся в архиве tar.gz, без их извлечения (то есть без записи файлов извлечения на диск).Я нашел модуль tarfile, и вот что я написал (очень упрощенно):

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'

проблема в том, что tar.extractfile (x) возвращает объект файла, который возвращает байты при вызове read ().Мне нужно вернуть str с использованием кодировки utf-8

1 Ответ

0 голосов
/ 27 ноября 2018

При вызове tarfile.open,

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

Параметр encoding управляет кодированием имен файлов, а не кодированием содержимого файла.Параметр encoding не имеет смысла контролировать кодирование содержимого файла, поскольку разные файлы внутри файла tar могут кодироваться по-разному.Таким образом, файл tar на самом деле содержит только двоичные данные.

Вы можете декодировать эти данные, обернув файл с помощью потокового считывателя UTF-8 из модуля codecs:

import codecs
utf8reader = codecs.getreader('utf-8')
for name in tar.getmembers():
    fp = utf8reader(tar.extractfile(name))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...