如何将csv数据读入django模型?

时间:2015-05-19 18:16:17

标签: python django csv django-models

尝试将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

2 个答案:

答案 0 :(得分:1)

Python 2.7的官方文档(假设)注意到以下内容..

注意:此版本的csv模块不支持Unicode输入。此外,目前有一些关于ASCII NUL字符的问题。因此,所有输入应为UTF-8或可打印的ASCII以确保安全;请参阅示例部分中的示例。

Python 2.7 CSV Examples

页面上的最后两个示例应该为您提供所需的内容。

**编辑

根据您的编辑...

Python 3.4 CSV Examples

with open('some.csv', newline='', encoding='utf-8') as f:

如果您不知道您尝试导入的数据的编码,那么您将遇到问题。有多种方法可以确定编码类型,但据我所知,这超出了CSV模块的范围。

答案 1 :(得分:1)

这条线似乎对我有用:

with open(TICKERS, encoding='utf-8', errors='ignore') as f: