我正在尝试从contatti.csv(包含两列“name”和“surname”)中查找training_full.csv(两列,“macroclass”和“description”)中的所有行。 我想在training_full.csv中检索“description”的所有行,其中contatti.csv中包含“name”和“surname”。
我创建的脚本似乎只评估training_full.csv的第一行,因此,只打印training_full.csv的第一行(脚本在其中找到匹配项)。 如果我修改training_full.csv的方式是在第一行没有任何匹配,则结果为空。
这里是代码:
import csv
match=[]
with open('xxxxxxxxxxx/training_full1.csv', encoding='utf-8') as csvfile, open('output.csv', 'wb') as output, open('xxxxxxxxxxx/contatti.CSV') as contatti:
spamreader = csv.reader(csvfile)
spamreader_contacts = csv.reader(contatti, delimiter=';')
spamwriter = csv.writer(output)
for row_desc in spamreader:
#print(righe[0])
for row_cont in spamreader_contacts:
#print(row[0])
if (row_cont[0] + " " + row_cont[1]) in row_desc[0]:
match.append(row_desc[0])
print(match)
感谢您的帮助,
菲利普。
答案 0 :(得分:1)
看看你的问题,它似乎可分为三个部分: 1)读取名称,并建立一个列表 2)将训练文件与名称列表进行比较 3)写下比赛
这样做,我们可以得到类似于以下的解决方案:
import csv
names = []
with open('xxxxxxxxxxx/contatti.csv', 'rb') as f:
contatti = csv.reader(f, delimiter=';')
for row in contatti:
names.append("{} {}".format(row[0], row[1]))
matches=[]
with open('xxxxxxxxxxx/training_full1.csv', 'rb', encoding='utf-8') as f:
training = csv.reader(f)
for row in training:
for name in names:
if name in row[1]: # description being the second column
matches.append(row[1])
break
with open('output.csv', 'wb') as f:
output = csv.writer(f)
for match in matches:
output.writerow(match)
print(matches)
您的解决方案尝试的主要问题是,正如评论中所指出的那样,一旦您查找了第一场比赛,您就会耗尽您的csv阅读器。在我提出的解决方案中,首先建立了一个名单。这将确保我们可以多次搜索名称。