我目前有两组数据文件,如下所示:
文件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] 删除。
我来说两句