【问题标题】:Merging two csv file based on header values in python根据python中的标头值合并两个csv文件
【发布时间】:2014-08-09 02:40:14
【问题描述】:

我有两个 csv 文件。每个文件的第一行是标题,其余行是数据。

第一个文件:

a, b, c, d, e, z,
1, 2, 3, 4, 5, 6,

第二个文件:

a, b, c, f, g,
7, 8, 9,10,11,

我想要一个合并的 csv 如下:

a, b, c, d, e, f, g, z,
1, 2, 3, 4, 5,  ,  , 6,
7, 8, 9,  ,  ,10,11,  ,

感谢任何帮助。 谢谢

【问题讨论】:

    标签: python csv merge


    【解决方案1】:

    使用csv.DictReadercsv.DictWriter

    import csv
    import itertools
    
    with open('1.csv') as f1, open('2.csv') as f2, open('new.csv', 'w') as f3:
        reader1 = csv.DictReader(f1, skipinitialspace=True)
        reader2 = csv.DictReader(f2, skipinitialspace=True)
        fieldnames = sorted(set(reader1.fieldnames) | set(reader2.fieldnames))
        # If want empty-name column to be placed at the end,
        #   uncomment following statement.
        # Otherwise it will be place at the beginning.
        #fieldnames.remove(''); fieldnames.append('')
    
        writer = csv.DictWriter(f3, fieldnames)
        writer.writeheader()
        writer.writerows(itertools.chain(reader1, reader2))
    

    如果您使用的是 Python 3.x,请使用 newline='' 打开文件。

    【讨论】:

    • 太棒了!谢谢你假的。我想使用一个 .csv 文件,它只有标题作为标题模板,其余文件应合并到其中。我如何在不排序的情况下使用它? dictWriter 在编写时给了我错误...我还编写了一个函数,该函数遍历要合并所有文件的目录和子目录。我是否应该以 f1 的形式打开合并的文件以再次合并到其中,并将临时文件设置为 f3,在每个文件的末尾将其覆盖到 f1 上?干杯
    • @cyrusR,请发表一个单独的问题。
    • 我会再发一个,我没有投反对票。我在 stackoverflow 中的评分还不够高,无法评分,所以我不知道它是怎么发生的......
    猜你喜欢
    • 2015-01-18
    • 2016-01-12
    • 2020-03-18
    • 2012-08-12
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多