【问题标题】:How to read csv data into django models?如何将 csv 数据读入 django 模型?
【发布时间】:2015-05-19 18:16:17
【问题描述】:

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

【问题讨论】:

    标签: python django csv django-models


    【解决方案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 模块的范围。

    【讨论】:

      【解决方案2】:

      这条线似乎对我有用:

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

      【讨论】:

        猜你喜欢
        • 2014-08-30
        • 2021-02-10
        • 2014-09-30
        • 1970-01-01
        • 2014-04-14
        • 1970-01-01
        • 2017-02-19
        • 2016-03-29
        • 1970-01-01
        相关资源
        最近更新 更多