Как использовать csv.DictReader для объекта tarfile в Python 3.6? - PullRequest
0 голосов
/ 03 октября 2018

Вот проблема, с которой я сталкиваюсь:

Error: iterator should return strings, not bytes (did you open the file in text mode?)

Код, который вызывает это, выглядит примерно так:

for fileinfo in tarfile.open(filename):
    f = t.extractfile(fileinfo)
    reader = csv.DictReader(f)
    reader.fieldnames

Кажется, проблема в том, что метод extractfile()создает io.BufferedReader , который является очень простым файловым объектом и не имеет высокоуровневого текстового интерфейса.

Что было бы хорошим способом справиться с этим?

Я думаю о том, чтобы расшифровать байты считывателя в тексте, но мне нужно сохранить потоковую передачу, потому что эти файлы очень большие.Кодовой базой является Python 3.6, работающий в Docker / Linux.

1 Ответ

0 голосов
/ 03 октября 2018

Спасибо и @ Aran-Fey, и @zwer, которые привели меня к другому вопросу StackOverflow , который ответил на него.Вот как это выглядит:

for fileinfo in tarfile.open(filename):
    with t.extractfile(fileinfo) as f:
        ft = codecs.getreader("utf-8")(f)
        reader = csv.DictReader(ft)
        reader.fieldnames

Кажется, это работает до сих пор.

...