搜索CSV文件,如果它不在fi中

2024-07-07 07:58:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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])

Tags: 文件csvin脚本信息列表forline
1条回答
网友
1楼 · 发布于 2024-07-07 07:58:15

如果你的CSV文件不是很大,我建议你把所有的东西都读一遍,把你想要的数据提取到字典里,把票号作为键。搜索字典很快。在

我修改了您的文件打开代码以使用with语句,如果在读取文件时出现问题,该语句将正常失败。顺便说一句,不需要指定逗号作为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")

如果键不在dict中,dict.get方法返回None,但如果需要,可以指定另一个默认返回值。所以我们可以把这部分重写成这样:

^{pr2}$

或者,我们可以使用in运算符:

for ticket in newtickets:
    if ticket in data:
        print(ticket, data[ticket])
    else:
        print(ticket, "not found")

所有3个版本的效率大致相同,请选择您觉得最可读的版本。在

相关问题 更多 >