代码之家  ›  专栏  ›  技术社区  ›  Neil C. Obremski

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

  •  1
  • Neil C. Obremski  · 技术社区  · 7 年前

    以下是我遇到的问题:

    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。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Neil C. Obremski    7 年前

    感谢@Aran Fey和@zwer带领我 another StackOverflow question 这就回答了问题。以下是方法:

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

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