2

このような2つのcsvファイルがあります

"id","h1","h2","h3", ...
"1","blah","blahla"
"4","bleh","bleah"

2 つのファイルをマージして、両方のファイルに同じ ID がある場合、行の値が 2 番目のファイルから取得されるようにしたいと思います。ID が異なる場合、マージされたファイルには両方の行が含まれている必要があります。


一部の値にはコマがあります

"54","34,2,3","blah"
4

3 に答える 3

2

キーの順序を維持し、に基づいて最後の行を維持すると、次の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
于 2013-05-15T11:15:24.143 に答える
1

Python3

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())
于 2013-05-15T11:17:48.580 に答える