我正在通过在Python中导入CSV文件来填充元组。现在,当我尝试在该元组中获取值的索引时,尽管存在该值,但它会给出Value error: is not in list
。下面是我正在使用的代码以及示例数据。
以下是csv的内容
IsNonPO,ApprovedState,ApprovalRecords/0/Comment,ApprovalRecords/0/Comment.Date
我正在使用以下代码
import csv
flist = [tuple(row) for row in csv.reader(open('D:\\result_IV.csv', 'rU'))]
print (flist)
x = flist.index('IsNonPO')
print(x)
下面是我得到的输出
[('IsNonPO', 'ApprovedState', 'ApprovalRecords/0/Comment','ApprovalRecords/0/Comment.Date']
File "C:/Users/abc/PycharmProjects/Default/first.py", line 10, in <module>
x = flist.index('IsNonPO')
ValueError: 'IsNonPO' is not in list
答案 0 :(得分:3)
这里的问题是,您正在分析元组中的CSV内容,然后将该元组存储在列表中。
flist = [('IsNonPO', 'ApprovedState', 'ApprovalRecords/0/Comment','ApprovalRecords/0/Comment.Date')]
要访问第一行,请使用flist [0]
然后使用元组获取值的索引:
flist[0].index('IsNonPO')
只需将第10行更改为:
x = flist[0].index('IsNonPO')
答案 1 :(得分:0)
您不遵循数据结构。
根据您的代码,得到的是元组列表。每个元组代表一行,每个元组项代表csv中的值。
所以
IsNonPO,ApprovedState,ApprovalRecords/0/Comment,ApprovalRecords/0/Comment.Date
你应该得到
[('IsNonPO', 'ApprovedState', 'ApprovalRecords/0/Comment','ApprovalRecords/0/Comment.Date')]
(请注意,)
结束后缺少]
。
所以确实,列表不包含给定的字符串,而是包含给定字符串的元组。
一种方法可能是
n, val = next((n, i) for n, i in enumerate(flist) if 'IsNonPO' in i)
为您提供包含'IsNonPO'
的第一项(和元组)。
然后,您可以继续在该元组中获取'IsNonPO'
的索引。
当然,这取决于您真正想要实现的目标。如果您总是只有一行,那么yashjain12yj's answer也可以。