Python比较两个列表

时间:2017-04-27 16:00:11

标签: python csv

我正在尝试从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)

感谢您的帮助,

菲利普。

1 个答案:

答案 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阅读器。在我提出的解决方案中,首先建立了一个名单。这将确保我们可以多次搜索名称。