我的代码如下。基本上,我有一个CSV文件和一个文本文件" input.txt"。我试图创建一个Python应用程序,它将接受来自" input.txt"的输入。并在CSV文件中搜索匹配项,如果找到匹配项,则应返回CSV文件的第一列。
import csv
csv_file = csv.reader(open('some_csv_file.csv', 'r'), delimiter = ",")
header = csv_file.next()
data = list(csv_file)
input_file = open("input.txt", "r")
lines = input_file.readlines()
for row in lines:
inputs = row.strip().split(" ")
for input in inputs:
input = input.lower()
for row in data:
if any(input in terms.lower() for terms in row):
print row[0]
说我的CSV文件如下所示:
book title, author
The Rock, Herry Putter
Business Economics, Herry Putter
Yogurt, Daniel Putter
Short Story, Rick Pan
并说我的input.txt看起来像这样:
Herry
Putter
因此,当我运行我的程序时,它会打印:
The Rock
Business Economics
The Rock
Business Economics
Yogurt
这是因为它搜索所有标题" Herry"首先,然后再次搜索"推杆"。所以最后,我有书名的重复。我试图想办法删除它们......所以,如果有人可以提供帮助,那将非常感激。
答案 0 :(得分:4)
如果原始订单无关紧要,请先将结果粘贴到一个集合中,然后在结尾处将其打印出来。但是,你的例子足够小,速度无关紧要。
答案 1 :(得分:3)
将结果粘贴在一个集合中(类似于列表但只包含唯一元素),并在最后打印。
喜欢的东西;
if any(input in terms.lower() for terms in row):
if not row[0] in my_set:
my_set.add(row[0])
答案 2 :(得分:2)
在搜索结果中将结果放入列表中,并且在首次搜索列表以查看结果是否已存在之后,仅将新结果添加到列表中。然后在搜索完成后打印列表。
答案 3 :(得分:1)
首先,在单个列表中获取您要查找的搜索词集。我们在此处使用set(...)
来消除重复的搜索字词:
search_terms = set(open("input.txt", "r").read().lower().split())
接下来,迭代数据表中的行,选择与搜索项匹配的每一行。在这里,我保留了原始代码的行为,因为我们在每行的任何列中搜索大小写标准化的搜索词。如果您只想搜索,例如作者专栏,然后需要调整:
results = [row for row in data
if any(search_term in item.lower()
for item in row
for search_term in search_terms)]
最后,打印结果。
for row in results:
print row[0]
如果您愿意,还可以列出作者或表格中的任何其他信息。 E.g:
for row in results:
print '%30s (by %s)' % (row[0], row[1])