繁体   English   中英

Python加入csv文件,其中key是第一列值

[英]Python Joining csv files where key is first column value

我尝试加入两个csv文件,其中key是第一列的值。 没有标题。
文件具有不同数量的行和行。
必须保留文件的顺序。

档案a:

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

文件b:

tonny,driver,new york
phill,scientist,boston

期望的结果:

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

我检查了所有相关的线程,我相信你们中的一些人会将这个问题重复,但我还没有找到解决方案。

我抓住了基于字典的解决方案,但这种方法不处理从文件'a'条件保留行顺序。

import csv
from collections import defaultdict

with open('a.csv') as f:
    r = csv.reader(f, delimiter=',')
    dict1 = {}
    for row in r:
        dict1.update({row[0]: row[1:]})

with open('b.csv') as f:
    r = csv.reader(f, delimiter=',')
    dict2 = {}
    for row in r:
        dict2.update({row[0]: row[1:]})

result = defaultdict(list)

for d in (dict1, dict2):
    for key, value in d.iteritems():
        result[key].append(value)

我也想避免将这些csv文件放到数据库中,如sqlite或使用pandas模块。

提前致谢

就像是

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)

产生

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

(请注意,我没有理会防范其中的情况下dict2有一个关键这是不是在dict1 -如果你喜欢可以轻松添加)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM