gpt4 book ai didi

Python 字典元组超出范围

转载 作者:太空宇宙 更新时间:2023-11-03 18:10:33 25 4
gpt4 key购买 nike

我有这个代码:

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'):

PS:fieldnames[5] 将返回“T”而不是“Amount”,因为列表的索引为 0。

关于Python 字典元组超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26056141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com