我一直试图从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