【发布时间】:2016-04-04 04:40:21
【问题描述】:
我在使用 unicodecsv 阅读器时遇到问题。我一直在寻找如何使用该模块的不同示例,但每个人都一直在参考来自 unicodecsv 网站的确切示例(或一些类似的变体)。
import unicodecsv as csv
from io import BytesIO
f = BytesIO()
w = csv.writer(f, encoding='utf-8')
_ = w.writerow((u'é', u'ñ'))
_ = f.seek(0)
r = csv.reader(f, encoding='utf-8')
next(r) == [u'é', u'ñ']
>>> True
对我来说,这个例子对我们的理解做了太多假设。它看起来不像正在传递 csv 文件。我完全错过了剧情。
我想做的是:
- 读取 csv 文件的第一行是标题
- 阅读剩余的行并将它们放入字典中
我的破代码:
import unicodecsv
#
i = 0
myCSV = "$_input.csv"
dic = {}
#
f = open(myCSV, "rb")
reader = unicodecsv.reader(f, delimiter=',')
strHeader = reader.next()
#
# read the first line of csv
# use custom function to parse the header
myHeader = FNC.PARSE_HEADER(strHeader)
#
# read the remaining lines
# put data into dictionary of class objects
for row in reader:
i += 1
dic[i] = cDATA(myHeader, row)
而且,正如预期的那样,我得到了“UnicodeDecodeError”。也许上面的例子有答案,但它们完全超出了我的想象。
有人可以修复我的代码吗?我的头发快用完了。
我将阅读器线路切换到:
reader = unicodecsv.reader(f, encoding='utf-8')
追溯: 对于阅读器中的行: 文件“C:\Python27\unicodecsv\py2.py”,下一个第 128 行 行中的值]
UnicodeDecodeError: 'utf8' codec can't decode byte 0x90 in position 48: invalide start byte
当我严格使用以下方法打印数据时:
f = open(myCSV, "rb")
reader = csv.reader(f, delimiter=',')
for row in reader:
print(str[row[9]] + '\n')
print(repr(row[9] + '\n')
>>> UTAS ? Offline
>>> 'UTAS ? Offline'
【问题讨论】: