2016-12-13 8 views
0

私のCSVファイルをテーブルにインポートしようとしています。csvファイルをsqliteテーブルにインポートする

のtest.CSV

"a",1,1 
"b",2,2 
"c",3,3 

エラー:

Traceback (most recent call last): 
    File "C:/Users/Sam/Desktop/big data/workspace/yelpdatabase.py", line 19, in <module> 
    to_db = [(i['letter'], i['num1'], i['num2']) for i in dr] 
    File "C:/Users/Sam/Desktop/big data/workspace/yelpdatabase.py", line 19, in <listcomp> 
    to_db = [(i['letter'], i['num1'], i['num2']) for i in dr] 
KeyError: 'letter' 

コード:

import csv 
import sqlite3 

#Create The Database 
connection = sqlite3.connect('test.db') 

#create cursor 
cursor = connection.cursor() 

#Create table 
cursor.execute('DROP TABLE IF EXISTS testtable') 
cursor.execute('CREATE TABLE testtable (letter text, num1 int, num2, int)') 

#Load the CSV file into CSV reader 
path = r"C:\Users\Sam\Desktop\big data\workspace\test.csv" 
with open(path,'r') as fin: # `with` statement available in 2.5+ 
    # csv.DictReader uses first line in file for column headings by default 
    dr = csv.DictReader(fin) # comma is default delimiter 
    to_db = [(i['letter'], i['num1'], i['num2']) for i in dr] 

cursor.executemany("INSERT INTO t (letter, num1, num2) VALUES (?, ?, ?);", to_db) 

#commit changes, and close the connection 
connection.commit() 
connection.close() 

は編集:私は、アップロードを私は同様の手順はhereしかし、私はエラーを取得しています見つけ続きますtest.csvファイル

+2

インポートしているCSVの先頭を追加してください。 – Javier

答えて

2

CSVを見ることなく、何が間違っているのかを知るのは難しいですが、 "KeyError"はDictReaderで生成された辞書に "letter"という名前のキーがないことを示しています。

あなたのCSVの最初の行に「文字」があることを再度確認します。私のCSVは、このように見えた場合たとえば、:

head1,head2,head3

1,2,3

を次にデータを抽出するための正しいラインは次のようになります。

to_db = [(i["head1"], i["head2"], i["head3"]) for i in dr] 

注 - 上記の例のように、キーは、大文字と小文字が区別され、「HEAD1 "は有効ですが、" Head1 "はKeyErrorを生成します。

編集:CSVをお送りいただきありがとうございます。 DictReaderがフィールド名["a","1","1"]を取得しているため、ヘッダー行がないことが問題です(これはdr.fieldnamesを呼び出して確認できます)。

CSVを変更することなく、コードの作業を行うには、にごDictReaderラインを変更することができます。

csv.DictReader(fin, ["letter", "num1", "num2"]) 

これは、手動で3に、ヘッダー「文字」、「NUM1」、および「NUM2」を割り当てます。列。次に、あなたはできる:

to_db = [(i["letter"], i["num1"], i["num2"]) for i in dr] 
関連する問題