2013-02-24 71 views
0

從我讀過這是一個常見的錯誤 - 我正在閱讀一個製表符分隔的文本文件到一個sqlite數據庫,而有15列,在一些行,沒有數據。例如,這裏是我的文本文件的塊我讀:錯誤與sqlite和python-提供的綁定數量不正確

http://www.vta.org/schedules/tdl/SC_902NO_WK.tdl

我只是在實際時間閱讀。問題是,例如,不是每一個欄完全充滿的時間,這就是爲什麼我得到

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses >15, and there are 8 supplied.

如何處理文本文件中的空值?

這裏是我的代碼

import sqlite3 as lite 
import sys 
import csv 
con = lite.connect('vta.db') 

with con: 

cur = con.cursor() 
cur.execute('DROP TABLE IF EXISTS NB_902_Wkdy') 
cur.execute("""CREATE TABLE NB_902_Wkdy (Train_Num INT primary key, Winchester TEXT,   Bascom TEXT, Fruitdale TEXT, Diridon TEXT, 

公約文本,Santa_Clara TEXT,Civic_Center TEXT,地鐵TEXT,塔斯曼TEXT,Old_Ironsides TEXT,Fair_Oaks TEXT,洛克希德TEXT,Whisman TEXT,Mountain_View TEXT) 「」「)

creader = csv.reader(open('NB_902_Wkdy', 'rb'), delimiter='\t')#, quotechar='|') 
for t in creader: 
    cur.execute('INSERT INTO NB_902_Wkdy VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', t) 

creader.close() 

回答

0

您還沒有指定什麼「處理」的意思,但假設你想插入NULL值到缺少的字段,你只需要它們添加到t,直到你有足夠的值:

for t in creader: 
    while len(t) < 15: 
     t += (None,) 
    cur.execute(..., t) 
相關問題