读取包内的csv文件

时间:2016-11-20 00:49:31

标签: python csv

很抱歉,如果这个问题很愚蠢,但我是一个蟒蛇新手。

我试图将python 2.7代码库移植到python 3.4 ...
我找到了这个代码片段,它应该遍历打包应用程序中的csv文件 虽然PyDev告诉我,pkg_resources.respource_stream未定义,但第一行似乎有效,导致第3行抛出此错误:_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)

io = pkg_resources.resource_stream(__name__, "data.csv")
c = csv.reader(io)
for record in c:
    #doStuff

我尝试将方法切换到resource_string,ResourceManager.resourceStream等,但我得到的只是不同的错误。

1 个答案:

答案 0 :(得分:4)

pkg_resources.resource_stream返回以二进制模式读取的流;它只返回读取的字节,并且不会尝试使用特定的编码对它们进行解码。

大多数用于编码和解码文本的工具都可以在codecs module中找到。要将二进制阅读器转换为给定特定编码的文本阅读器,请使用codecs.getreader。由于您自己捆绑此文件,因此您应该知道编码,它应该是UTF-8。所以你会写:

io = pkg_resources.resource_stream(__name__, "data.csv")
utf8_reader = codecs.getreader("utf-8")
c = csv.reader(utf8_reader(io))
for record in c:
    # doStuff