2
我还是一位新来的Python,我试图从this post改编此代码以便为我工作。比较两个CSV文件并搜索相似的项目
该帖子和我正在寻找的东西之间的区别在于,我希望在两个文件中找到匹配的“签名”时,连接来自hosts.csv和masterlist.csv的匹配行的全部内容。
所以,如果hosts.csv是这样的:
Path Filename Size Signature
C:\ a.txt 14kb
D:\ b.txt 99kb 678910
C:\ c.txt 44kb 111213
而且masterlist.csv是这样的:
Signature Name State
Joe CT
567890 Sue MA
111222 Dan MD
与马亭皮特斯在他的SERK的响应后发布的代码修改一下,他的代码使我获得了大部分途径。
import time, csv
timestr = time.strftime("%Y%m%d_%H%M")
outputfile = "Results_" + (timestr) + ".csv"
with open('masterlist.csv', 'rb') as master:
master_indices = dict((r[0], i) for i, r in enumerate(csv.reader(master)))
with open('hosts.csv', 'rb') as hosts:
with open('results.csv', 'wb') as results:
reader = csv.reader(hosts)
writer = csv.writer(results)
writer.writerow(next(reader, []) + ['RESULTS'])
for row in reader:
index = master_indices.get(row[3])
if index is not None:
message = 'FOUND in (row {})'.format(index)
else:
message = 'NOT FOUND'
writer.writerow(row + [message])
而不是仅仅增加为SERK一直在寻找,结果列表示匹配的签名,我怎么能拉从masterlist.csv和hosts.csv文件中相应的行并连接两者结合起来的results.csv文件?所需的输出文件应该是这样的:
Path Filename Size RESULTS Signature Name State
C:\ a.txt 14kb FOUND in Row 1Joe CT
D:\ b.txt 99kb FOUND in Row 2 678910 Sue MA
C:\ c.txt 44kb NOT FOUND 111213
在此先感谢,对这里的响应已经帮助我最我一直在寻找的解决方案!
你有使用Python合并吗? 'join' shell命令已经做到了。 (另外,您所做的操作的名称是“连接”,这在关系数据库中非常常见。) –