尝试将csv文件导入Django模型后,我不断收到此错误消息。
TICKERS
有两列:column [0] = name,column [1] = ticker
populate_symbol.py
def populate():
with open(TICKERS, 'rU') as csvfile:
file = csv.reader(csvfile, delimiter=',')
for row in file:
add_ticker(str(row[0]), str(row[1]))
def add_ticker(name, ticker):
c = Symbol.objects.get_or_create(name=name, ticker=ticker)
return c
错误讯息:
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 555: invalid start byte
有没有办法标记csv阅读器来读取所有类型的数据(utf-8或unicode)?
P.S:
Python 3.4.3,Django 1.7
答案 0 :(得分:1)
Python 2.7的官方文档(假设)注意到以下内容..
注意:此版本的csv模块不支持Unicode输入。此外,目前有一些关于ASCII NUL字符的问题。因此,所有输入应为UTF-8或可打印的ASCII以确保安全;请参阅示例部分中的示例。
页面上的最后两个示例应该为您提供所需的内容。
**编辑
根据您的编辑...
with open('some.csv', newline='', encoding='utf-8') as f:
如果您不知道您尝试导入的数据的编码,那么您将遇到问题。有多种方法可以确定编码类型,但据我所知,这超出了CSV模块的范围。
答案 1 :(得分:1)
这条线似乎对我有用:
with open(TICKERS, encoding='utf-8', errors='ignore') as f: