如果这个问题很愚蠢,我很抱歉,但我是个 Python 新手。
我正在尝试将 python 2.7 代码库移植到 python 3.4...
我发现这段代码片段应该遍历打包应用程序中的 csv 文件。
尽管 PyDev 告诉我,pkg_resources.respource_stream 未定义第一行似乎有效,导致第三行抛出此错误:_csv.Error: iterator should return strings, not bytes (did you open the file in text模式?)
io = pkg_resources.resource_stream(__name__, "data.csv")
c = csv.reader(io)
for record in c:
#doStuff
我尝试将方法切换为 resource_string、ResourceManager.resourceStream 等,但我得到的只是不同的错误。
请您参考如下方法:
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
