2015-05-19 152 views
0

嘗試將csv文件導入Django模型後,我不斷收到此錯誤消息。如何讀取CSV數據到Django模型?

TICKERS有兩列:柱[0] =名,列[1] =股票

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

回答

1

此行似乎爲我工作:

with open(TICKERS, encoding='utf-8', errors='ignore') as f: 
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模塊的範圍。