簡體   English   中英

Python dict元組超出范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM