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命令已經做到了。 (另外,您所做的操作的名稱是「連接」,這在關係數據庫中非常常見。) –