我正在尝试使用一个非常大的数据集,其中包含一些非标准字符。我需要使用unicode,根据工作规范,但我感到困惑。(而且很可能做得都不对。)
我使用以下命令打开CSV:
15 ncesReader = csv.reader(open('geocoded_output.csv', 'rb'), delimiter='\t', quotechar='"')
然后,我尝试将其编码为:
name=school_name.encode('utf-8'), street=row[9].encode('utf-8'), city=row[10].encode('utf-8'), state=row[11].encode('utf-8'), zip5=row[12], zip4=row[13],county=row[25].encode('utf-8'), lat=row[22], lng=row[23])
除了lat和液化天然气,我对所有东西都进行编码,因为它们需要发送到API。当我运行程序将数据集解析为我可以使用的内容时,我得到以下回溯。
Traceback (most recent call last):
File "push_into_db.py", line 80, in <module>
main()
File "push_into_db.py", line 74, in main
district_map = buildDistrictSchoolMap()
File "push_into_db.py", line 32, in buildDistrictSchoolMap
county=row[25].encode('utf-8'), lat=row[22], lng=row[23])
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 2: ordinal not in range(128)
我想我应该告诉你我使用的是Python2.7.2,这是在Django1.4上构建的应用程序的一部分。我读过几篇关于这个话题的文章,但似乎没有一篇是直接适用的。任何帮助都将不胜感激。
您可能还想知道,导致该问题的一些非标准字符是~,可能是~。
Unicode不等于UTF-8。后者只是前者的编码。
你这样做是不对的。您正在读取编码的UTF-8-数据,因此必须将UTF-8编码的字符串解码为unicode字符串。
所以只要用
.decode
替换.encode
,它就应该工作了(如果您的.csv是UTF-8编码的)。不过,没什么好羞愧的。我敢打赌,五分之三的程序员一开始很难理解这一点,如果不是更多的话;)
更新: 如果您的输入数据是而不是UTF-8编码的,那么您当然必须使用适当的编码。如果没有给出任何内容,python将采用ASCII,这显然会在非ASCII字符上失败。
对于Python 3用户。你可以的
它也适用于烧瓶:)
只需在代码中添加以下行:
相关问题 更多 >
编程相关推荐