私はまだPythonには新しく、このコードをthis postから私に適合させようとしています。2つの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さんの投稿への彼の応答マルタインピータースにより投稿されたコードいじり、彼のコードは私をそこに向かわせてくれます。代わり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])
私はmasterlist.csvとhosts.csvファイルから対応する行に引っ張ることができる方法、マッチング署名を示し、内2つを連結します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
おかげで、ここでの応答はすでに私が探してきたソリューションのほとんどで私を助けてきました!
にマージ? 'join'シェルコマンドはこれを既に行います。 (また、実行している操作の名前は "join"です。これはリレーショナルデータベースでは本当に一般的です)。 –