很抱歉,如果这个问题很愚蠢,但我是一个蟒蛇新手。
我试图将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等,但我得到的只是不同的错误。
答案 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