我有一个填充了故障单信息的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])
答案 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个版本的效率大致相同,请选择您认为最具可读性的版本。