搜索CSV文件以及它是否不在文件中

时间:2018-05-04 16:58:15

标签: python python-2.7 csv search

我有一个填充了故障单信息的CSV文件。我创建了一个小脚本来输入以空格分隔的票号到列表中,该列表在CSV文件中搜索列表中的每个票证,如果找到票证,则输出该行的信息。

我的问题是,如果我搜索不在CSV文件中的票证,它只是跳过它并继续前进,但我希望它告诉我该票证不在文件中。据我所知,它是按行或行搜索CSV文件。如果我尝试else语句,它将开始打印CSV文件中的每一行,如果该票证不在行中。

我需要能够输入多个票号并分别对每个票号进行python搜索。如果它在第1列中找到故障单,则从该行打印信息,如果它在任何行第1列中找不到故障单,则打印出该故障单,然后“不在文件中”。

import csv

file = csv.reader(open('Path To CSV file', "rb"), delimiter=",")
newticket = raw_input('Enter Ticket Numbers:').split()

for line in file:
    for tickets in newticket:
        if tickets == line[1]:
            print(tickets, line[36], line[37])

1 个答案:

答案 0 :(得分:3)

如果您的CSV文件不是很大,我建议您阅读整个内容,将您想要的数据提取到字典中,并将票号作为密钥。搜索字典非常快。

我已修改您的文件打开代码以使用import csv with open('Path To CSV file', "rb") as f: data = {line[1]: (line[36], line[37]) for line in csv.reader(f)} newtickets = raw_input('Enter Ticket Numbers:').split() for ticket in newtickets: line = data.get(ticket) if line: print(ticket, line) else: print(ticket, "not found") 语句,如果在读取文件时出现问题,该语句会正常失败。顺便说一句,没有必要将逗号指定为CSV分隔符,因为它是默认分隔符。

dict.get

如果密钥不在dict中,None方法将返回for ticket in newtickets: line = data.get(ticket, "not found") print(ticket, line) ,尽管您可以根据需要指定另一个默认返回值。所以我们可以像这样重写那部分:

in

或者,我们可以使用for ticket in newtickets: if ticket in data: print(ticket, data[ticket]) else: print(ticket, "not found") 运算符:

{{1}}

所有3个版本的效率大致相同,请选择您认为最具可读性的版本。