在python csv.reader中解码utf-8

时间:2015-02-18 17:02:10

标签: python csv utf-8 sqlite

我一直试图从csv文件中读取并放入在sqlite3中创建的数据库表中。尝试了一百万种不同的东西和最新的我使用utf-8解码器,假设csv使用utf-8但是出现了以下错误:

  File "/Users/yanhu/Documents/Python/Practice/DataScience_lec02_inclass_csv.py", line 15, in unicode_csv_reader
    yield [unicode(cell, 'utf-8') for cell in row]
UnicodeDecodeError: 'utf8' codec can't decode byte 0xaa in position 1: invalid start byte

这是我的代码:

import csv
import unicodecsv 
import sqlite3

#define a decoder to decode UTF-8 to unicode

def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs):
    # csv.py doesn't do Unicode; encode temporarily as UTF-8:
    csv_reader = csv.reader(unicode_csv_data,
                            dialect=dialect, **kwargs)
    for row in csv_reader:
        # decode UTF-8 back to Unicode, cell by cell:
        yield [unicode(cell, 'utf-8') for cell in row]

conn = sqlite3.connect("example.db")
c = conn.cursor()
c.execute("CREATE TABLE GDPNEW (Code text, Ranking int, Country text, GDP int)")

c.execute("DELETE FROM GDPNEW")

with open('GDP.csv', 'rU') as csvfile:
    readercsv=unicode_csv_reader(csvfile)
    row_count = 0

    for row in readercsv:
        if row_count !=0:
            row[1]=int(row[1])
            row[3]=int(row[3])
            print row[2]
            c.execute("INSERT INTO GDPNEW VALUES (?,?,?,?)", (row[0], row[1], row[2], row[3]))
            conn.commit()

        row_count += 1

results = c.execute("SELECT * FROM GDPNEW")

for row in results.fetchall():
    print row

0 个答案:

没有答案