Python - 比较2个csv文件,将匹配行的最后一列写入第3个文件

时间:2015-04-19 23:08:04

标签: python csv

我有2个csv文件:

File1.csv

param.1, 256,254,236
param.2, 256,260,300
param.3, 300,700,800
...

File2.csv

1,300,700,800,0.8
2,256,254,236,0.85
3,256,260,300,0.9
...

正如您所看到的行的顺序不相似。 file2.csv有一个额外的行,这是结果。我希望脚本经过并将每一行与file1.csv进行比较,找到匹配的行。然后从匹配行(0.8)中取最后一个值,并从file1.csv(param.3)中获取索引值。然后输出一个名为result.3的新文件,并在该文件中写入0.8。同样,我想为数百个数据执行此操作。如果最后一个字段为空,我想输出" none",并使用相应的文件名result.x

如果我不清楚,请告诉我。谢谢你的帮助。

抱歉,我应该添加到目前为止我正在尝试的内容,这不会给我任何输出。不确定有什么问题

noDesignVariables = 4 # ---- change this to proper input
with open('/home/prabh00b/dakoat_wb_script/exp1.csv', 'r') as fin:  # add proper location index for exp1.csv
    for line in fin.readlines():
        line = line.strip().split(',')
        index = int(line[0])
#        print line
#        print index

        if len(line) == noDesignVariables + 1:
            res = float(line[noDesignVariables + 1])
            print res
        else:
            res = 'none'

with open('result.out.%d' %index, 'w') as fout:
    fout.write(str(res) + '\n')

1 个答案:

答案 0 :(得分:0)

构造包含数据的两个词典,然后将它们合并到公共密钥上

>>> d1 = {(b.strip(),c,d):a for a,b,c,d in[r.split(',')for r in open('f1.csv')]}
>>> d2 = {(b,c,d):[a,e] for a,b,c,d,e in[r.split(',')for r in open('f2.csv')]}
>>> d3 = {k2:d2[k2]+[d1[k2]] for k2 in d2 if k2 in d1}

结果就像

>>> print d3
{('256', '254', '236'): ['2', '0.85', 'param.1'],
 ('256', '260', '300'): ['3', '0.9', 'param.2'],
 ('300', '700', '800'): ['1', '0.8', 'param.3']}

当你有d3时,你可以输出你想要的一切(我必须承认我还没有完全理解你的输出要求......)。