python - 搜索 CSV 文件,如果它不在文件中
问题描述
我有一个包含票务信息的 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])
解决方案
如果您的 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.get
方法返回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")
所有 3 个版本的效率大致相同,请选择您认为最可读的版本。
推荐阅读
- python - mat1 和 mat2 形状不能相乘
- c# - DataTables 警告:表 id=tblData 我没有编译我的程序
- ios - Swift - 滚动视图问题(向下拖动时需要打印)
- python - 为什么转置不改变数组的迭代顺序
- pine-script - 将 DMI 从 Tradingview 移植到 MQL4 中的修订 ADX - 没有给出等效结果
- r - R中带有NA的跨核2D卷积
- docker - apt-get 更新无根 Docker
- javascript - Laravel 8 + nginx - 来自公共/未加载的 app.css 和 app.js 资源 - 未找到 404
- python - tkinter iconbitmap 不起作用,wm_iconbitmap 也不起作用
- swift - 需要使用只有左上角和左下角圆角的形状来剪辑形状