我有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')
答案 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
时,你可以输出你想要的一切(我必须承认我还没有完全理解你的输出要求......)。