值错误:项目不在列表中。 2D阵列/列表,我完全卡住了

时间:2016-05-03 09:07:05

标签: python python-2.7 csv

运行此部分时,它会返回Value Error: item not in list. 我试图在csv的第5列中搜索特定的数字,然后打印它所在的行。我输入的号码肯定在列表中。有什么帮助吗?

def borrowing():
    id = (raw_input("What is the OCLC of the book being borrowed?\n"))
    while True:
        try:
            id = int(id) #changes id to int, must be changed back to str.
            break
        except ValueError:
            id = (raw_input("Enter the OCLC with numbers only: \n"))
    id = str(id)
    x = open('bl.csv','rU')
    reader = list(csv.reader(x))
    index = reader.index(id)
    if info(index) == id:
        y = info[index]
        print "The following has been found:",y

3 个答案:

答案 0 :(得分:2)

错误位于此行index = reader.index(id)

读者实际上返回一个列表,其中所有行都是嵌套列表。因此,要实际从reader获取索引,您应该像这样传递整行。

index = myreader.index(['column1', 'column2', 'column3', 'column4']) 

但是如果你正在寻找一个特定的属性,那么你应该做这样的事情。

def borrowing():
    id = (raw_input("What is the OCLC of the book being borrowed?\n"))
    while True:
        try:
            id = int(id) #changes id to int, must be changed back to str.
            break
        except ValueError:
            id = (raw_input("Enter the OCLC with numbers only: \n"))
    id = str(id)
    x = open('bl.csv','rU')
    reader = list(csv.reader(x))
    id = str(id)
    x = open('bl.csv','rU')
    reader = list(csv.reader(x))
    index = 0
    for ind, item in enumerate(myreader):
        if id in item:
            index = ind
            print 'Found it'
            print ind+1,': This is row number'#Because index start with 0
    print index #Here it is. Assigned!!!

答案 1 :(得分:2)

首先,在寻求帮助时,您应该发布您收到的完整错误消息。

现在,我猜测你的问题来自以下两行代码:

reader = list(csv.reader(x))
index = reader.index(id)

reader包含列表列表(每行是一个字符串列表),reader.index(id)当然无法找到任何内容。

你必须像这样迭代reader

for n, row in enumerate(reader):
  if row[4] == id:
    print n, row

顺便说一下,不需要reader列表。您可以直接迭代csv.reader()

的结果
for n, row in enumerate(csv.reader(x)):
  ...

答案 2 :(得分:1)

转换为列表的

csv.reader是二维的。第一个维度是行,第二个维度是列。所以你不能在其中找到5个。