このような2つのcsvファイルがあります
"id","h1","h2","h3", ...
"1","blah","blahla"
"4","bleh","bleah"
2 つのファイルをマージして、両方のファイルに同じ ID がある場合、行の値が 2 番目のファイルから取得されるようにしたいと思います。ID が異なる場合、マージされたファイルには両方の行が含まれている必要があります。
一部の値にはコマがあります
"54","34,2,3","blah"
キーの順序を維持し、に基づいて最後の行を維持すると、次のid
ようなことができます。
import csv
from collections import OrderedDict
from itertools import chain
incsv = [csv.DictReader(open(fname)) for fname in ('/home/jon/tmp/test1.txt', '/home/jon/tmp/test2.txt')]
rows = OrderedDict((row['id'], row) for row in chain.from_iterable(incsv))
for row in rows.itervalues(): # write out to new file or whatever here instead
print row
import csv
with open("a.csv") as a:
fields = next(a)
D = {k: v for k,*v in csv.reader(a)}
with open("b.csv") as b:
next(b)
D.update({k: v for k,*v in csv.reader(b)})
with open("c.csv", "w") as c:
c.write(fields)
csv.writer(c, quoting=csv.QUOTE_ALL).writerows([k]+v for k,v in D.items())