比较两个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()