Python Joining csv files where key is first column value

前端 未结 1 674
深忆病人
深忆病人 2020-12-10 16:24

I try to join two csv files where key is value of first column. There\'s no header.
Files have different number of lines and rows.
Order of file a must be preserved.

相关标签:
1条回答
  • 2020-12-10 17:21

    Something like

    import csv
    from collections import OrderedDict
    
    with open('b.csv', 'rb') as f:
        r = csv.reader(f)
        dict2 = {row[0]: row[1:] for row in r}
    
    with open('a.csv', 'rb') as f:
        r = csv.reader(f)
        dict1 = OrderedDict((row[0], row[1:]) for row in r)
    
    result = OrderedDict()
    for d in (dict1, dict2):
        for key, value in d.iteritems():
            result.setdefault(key, []).extend(value)
    
    with open('ab_combined.csv', 'wb') as f:
        w = csv.writer(f)
        for key, value in result.iteritems():
            w.writerow([key] + value)
    

    produces

    john,red,34
    andrew,green,18
    tonny,black,50,driver,new york
    jack,yellow,27
    phill,orange,45,scientist,boston
    kurt,blue,29
    mike,pink,61
    

    (Note that I didn't bother protecting against the case where dict2 has a key which isn't in dict1-- that's easily added if you like.)

    0 讨论(0)
提交回复
热议问题