问题描述
|
我的代码如下。基本上,我有一个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 \”的所有标题,然后再次搜索\\“ Putter \”。所以最后,我有书名的重复。我正在尝试找出一种删除它们的方法...因此,如果有人可以提供帮助,将不胜感激。
解决方法
如果原始顺序无关紧要,请先将结果粘贴到一组中,然后在最后打印出来。但是,您的示例足够小,而速度无关紧要。
,将结果放在一组中(类似于列表,但仅包含唯一元素),并在最后打印。
就像是;
if any(input in terms.lower() for terms in row):
if not row[0] in my_set:
my_set.add(row[0])
,在搜索过程中,将结果粘贴到列表中,只有在首先搜索列表以查看结果是否已经存在之后才将新结果添加到列表中。然后,搜索完成后,打印列表。
,首先,在单个列表中获取要查找的一组搜索词。我们在此处使用“ 5”来消除重复的搜索词:
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]
如果需要,您还可以在表格中列出作者或任何其他信息。例如。:
for row in results:
print \'%30s (by %s)\' % (row[0],row[1])