比较两个CSV文件并搜索相似的项目


问题内容

因此,我有两个CSV文件,它们试图进行比较并获得相似项目的结果。第一个文件hosts.csv如下所示:

Path    Filename    Size    Signature
C:\     a.txt       14kb    012345
D:\     b.txt       99kb    678910
C:\     c.txt       44kb    111213

第二个文件masterlist.csv如下所示:

Filename    Signature
b.txt       678910
x.txt       111213
b.txt       777777
c.txt       999999

如您所见,行不匹配,并且masterlist.csv始终大于hosts.csv文件。我要搜索的唯一部分是签名部分。我知道这看起来像:

hosts[3] == masterlist[1]

我正在寻找一种解决方案,可以给我类似以下内容(基本上是带有新的RESULTS列的hosts.csv文件):

Path    Filename    Size    Signature    RESULTS
C:\     a.txt       14kb    012345       NOT FOUND in masterlist
D:\     b.txt       99kb    678910       FOUND in masterlist (row 1)
C:\     c.txt       44kb    111213       FOUND in masterlist (row 2)

我已经搜索了帖子,并在这里找到了类似的内容,但是由于我仍在学习python,所以我不太了解。

*使用Python 2.6 *编辑


问题答案:

编辑: 当我的解决方案正常工作时,请查看以下Martijn的答案,以获得更有效的解决方案。

您可以在此处找到python CSV模块的文档。

您正在寻找的是这样的:

import csv

f1 = file('hosts.csv', 'r')
f2 = file('masterlist.csv', 'r')
f3 = file('results.csv', 'w')

c1 = csv.reader(f1)
c2 = csv.reader(f2)
c3 = csv.writer(f3)

masterlist = list(c2)

for hosts_row in c1:
    row = 1
    found = False
    for master_row in masterlist:
        results_row = hosts_row
        if hosts_row[3] == master_row[1]:
            results_row.append('FOUND in master list (row ' + str(row) + ')')
            found = True
            break
        row = row + 1
    if not found:
        results_row.append('NOT FOUND in master list')
    c3.writerow(results_row)

f1.close()
f2.close()
f3.close()