根据匹配的Python第一列合并数据

Rk_23:

我目前有两组数据文件,如下所示:

文件1:

test1 ba ab cd dh gf
test2 fa ab cd dh gf
test3 rt ty er wq ee
test4 er rt sf sd sa

并在文件2中:

test1 123 344 123
test1 234 567 787
test1 221 344 566
test3 456 121 677

我想根据第一列中的数学行合并文件(以便“测试”匹配)

像这样:

test1 ba ab cd dh gf 123 344 123
test1 ba ab cd dh gf 234 567 787
test1 ba ab cd dh gf 221 344 566
test3 rt ty er wq ee 456 121 677

我有这个密码

def combineFiles(file1,file2,outfile):
      def read_file(file):
         data = {}
         for line in csv.reader(file):
            data[line[0]] = line[1:]
         return data
      with open(file1, 'r') as f1, open(file2, 'r') as f2:
         data1 = read_file(f1)
         data2 = read_file(f2)
         with open(outfile, 'w') as out:
            wtr= csv.writer(out)
            for key in data1.keys():
               try:
                  wtr.writerow(((key), ','.join(data1[key]), ','.join(data2[key])))
               except KeyError:
                  pass

但是输出最终看起来像这样:

test1 ba ab cd dh gf 123 344 123
test3 er rt sf sd sa 456 121 677

谁能帮我实现输出,以便test1可以全部打印三遍?

非常感激

滑块:

虽然我会推荐Brad Solomon的方法,因为它非常简洁,但是您只需要在代码中做一些改动即可。

由于您的第二个文件是带有“最终决定权”的文件,因此您只需要为第一个文件创建字典。然后,您可以在从第二个文件中读取时写入输出文件,并从data1字典中获取值

with open(file1, 'r') as f1, open(file2, 'r') as f2:
    data1 = read_file(f1)
    with open(outfile, 'w') as out:
        wtr = csv.writer(out, delimiter=' ')
        for line in csv.reader(f2, delimiter=' '):
            # only write if there is a corresponding line in file1
            if line[0] in data1:
                # as you write, get the corresponding file1 data
                wtr.writerow(line[0:] + data1[line[0]] + line[1:])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据第一列合并数据?

根据第一列合并多行

根据第一列合并文件

根据匹配的第一列(带标题)合并两个 CSV

根据第一列合并文件并在列名不匹配的地方添加零

根据一列的值合并数据

根据第一列的值合并多列

合并具有匹配的第一列的行

根据列合并数据帧,仅保留第一个匹配项

根据同一列合并多个数据框

根据另一列合并数据框中的行

根据Python中的多个条件,将一列从多个数据框合并到另一数据框

根据第一列合并多行,但所有列应保持独立

根据第一列合并几个制表符分隔文件的某些列

如果第一列使用bash匹配,则仅合并CSV中的特定列

根据数据框中两列之间的差异对字典的值求和,并将第一列除以二 - Python

根据第一列的重复值匹配第二列的重复值

根据第一列的匹配值替换文件第二列中的值

根据第一列对2个文件进行排序和合并,没有重复的行

第一列中的匹配字符

根据第一个文件第一列的所有值合并2个文件

根据一列中的匹配项合并2个CSV文件,而不管标题行

Python熊猫,数据按X大小合并一列

根据第一列比较2个文件并打印不匹配的文件

根据第一列中的模式更改在pandas数据框中创建新列

R数据帧:根据另一列中的值更改第一列中的值

通过根据列值熊猫数据框将一列置于另一列之下,将多列合并为一列

使用第一列作为索引合并 2 个数据帧

根据与熊猫数据框的另一列值的部分匹配获取多列值