csv
私には問題のように聞こえます。
残念ながら、マスターファイル自体、アウトファイル、またはその両方を変更したい場合、あなたの質問からは明らかではありません。これは2番目の処理を行います(マスターファイルとアップデートファイルを両方ともcsv形式で受け取り、マージされたものをソートせずに出力ファイルに出力します)。これがあなたが望むものではない場合、またはカンマで区切られたデータを取得したが、上にフィールド名がない場合、必要に応じて変更するのは簡単です。
import csv
with open("master.csv") as m, open("update.csv") as u, open("out.csv", "w") as o:
master = { line['ID']: line for line in csv.DictReader(m) }
update = { line['ID']: line for line in csv.DictReader(u) }
master.update(update)
fields = csv.DictReader(open("master.csv")).fieldnames
out = csv.DictWriter(o, fields)
out.writeheader()
out.writerows(master.values())
master.csv を次のように使用します。
ID,Name,Foo,Bar,Baz,Description
1000001,Name here:1,1001,1,description here
1000002,Name here:2,1002,2,description here
1000003,Name here:3,1003,3,description here
1000004,Name here:4,1004,4,description here
1000005,Name here:5,1005,5,description here
1000006,Name here:6,1006,6,description here
1000007,Name here:7,1007,7,description here
1000008,Name here:8,1008,8,description here
1000009,Name here:9,1009,9,description here
および update.csv など:
ID,Name,Foo,Bar,Baz,Description
1000003,UPDATED Name here:3,1003,3, UPDATED description here
1000010,NEW ITEM Name here:9,1009,9,NEW ITEM description here
out.csv に出力します。
ID,Name,Foo,Bar,Baz,Description
1000010,NEW ITEM Name here:9,1009,9,NEW ITEM description here ,
1000008,Name here:8,1008,8,description here,
1000009,Name here:9,1009,9,description here,
1000006,Name here:6,1006,6,description here,
1000007,Name here:7,1007,7,description here,
1000004,Name here:4,1004,4,description here,
1000005,Name here:5,1005,5,description here,
1000002,Name here:2,1002,2,description here,
1000003,UPDATED Name here:3,1003,3, UPDATED description here,
1000001,Name here:1,1001,1,description here,
順序は保持されないことに注意してください(必要に応じて質問から明確ではありません)。しかし、それは速くてきれいです。