如何使用 csv.Python 3.6 中 tarfile 对象上的 DictReader ?



这是我遇到的问题:

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 是一个非常基本的类似文件的对象,没有高级文本界面。

处理这个问题的好方法是什么?

我正在考虑将阅读器的字节解码为文本,但我需要保留流,因为这些文件非常大。代码库是在Docker/Linux上运行的Python 3.6。

感謝 @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

到目前为止,这似乎有效。

最新更新