[英]Python dict tuple out of range
我有以下代碼:
f = open('File4Gym.dat')
try:
db = lite.connect('/var/www/members.db')
fieldnames = ('Shop', 'PUC Code Num', 'Name', 'Date/ Reason', 'Amount', 'T', 'PUC Code', 'Status', 'Date')
reader = csv.DictReader(f, fieldnames=fieldnames)
for row in reader:
for fieldnames in row.items():
#print row
if fieldnames[5] <> '0.00' or '14.95' or '16.95':
print "Committing INSERT"
c = db.execute("""INSERT "debit" = '%s' FROM "members" WHERE "puccode" = '%s'""" % (fieldnames[5], fieldnames[7],))
返回錯誤:
pi@raspberrypi ~ $ python cronjob3.py
Traceback (most recent call last):
File "cronjob3.py", line 13, in <module>
if fieldnames[5] <> '0.00' or '14.95' or '16.95':
IndexError: tuple index out of range
我該如何參考csv.DictReader中的各個字段,並將“ if”語句中的值以外的值插入SQL表中?
樣本文件(根據要求):
"Shop Name",PUCLxxx,"Customer 1","09/09/2014",0.00,T,"PUCLxxx","Closed Account ",20140909
"Shop Name",PUCLyyy,"Customer 2","09/09/2014",0.00,T,"PUCLyyy","Closed Account ",20140909
非常感謝!
您嘗試訪問哪些fieldnames
? 您將其定義為('Shop', 'PUC...
,然后將其for fieldnames in row:
。我想其中之一需要重命名。
新的fieldnames
必須少於6個元素。 嘗試在循環中將其打印出來,以查看返回了什么。
編輯:我想我已經找到了問題。
for fieldnames in row.items():
fieldnames
遍歷字典row
的鍵/值對。 每對是2元組,所以5個超出范圍。
我認為用以下代碼替換您的for
循環應該可以達到您想要的目的
for row in reader:
if row['Amount'] <> '0.00' or '14.95' or '16.95': #is this the field you were after?
print "Committing INSERT"
c = db.execute("""INSERT "debit" = '%s' FROM "members" WHERE "puccode" = '%s'""" % (row['Amount'], row['PUC Code Num'],))
附帶說明一下,您要使用if row['Amount'] <> '0.00' or '14.95' or '16.95':
條件來實現什么? 正如它寫的那樣,它將永遠是真實的。 如果要檢查金額是否為0.00或14.95或16.95之一,則使用if row['Amount'] not in ('0.00', '14.95', '16.95'):
16.95 if row['Amount'] not in ('0.00', '14.95', '16.95'):
PS:fieldnames [5]將返回“ T”而不是“ Amount”,因為列表已索引為0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.