Как использовать csv.DictReader для объекта tarfile в Python 3.6?
Вот проблема, с которой я сталкиваюсь:
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 ответ
Спасибо и @Aran-Fey, и @zwer, которые привели меня к другому вопросу Stackru, который ответил на него. Вот как:
for fileinfo in tarfile.open(filename):
with t.extractfile(fileinfo) as f:
ft = codecs.getreader("utf-8")(f)
reader = csv.DictReader(ft)
reader.fieldnames
Кажется, это работает до сих пор.