如何在Python中根据共同值合并两个文本文件
我有两个不同的文件。
我需要把这两个文件合并成一个文件。它们之间有一个共同的值。这两个文件的格式是这样的。匹配的内容不会是按顺序排列的。比如,数据集1的第一行可能和数据集2的第一行不匹配,更有可能的是数据集1的第一行会和数据集2的第16行或者第45行匹配。
加粗的部分就是匹配的值。任何方向上的帮助都非常感谢。
BEEC,BE-EC,,154.7,46.07,,31.63,54.6,4833.6,5.06 BPLZ,BE-LZ,,390.6,62.62,,49.0,145.0,27.3,61.52 BFLP,BF-OP,,180.1,34.89,,40.0,58.26,8533.8,7.31 MRM1234-BEEC-1635753E001 25.6 70.29 MRM1234-BPLZ-1814737E003 8.12 18.13 MRM1234-BFLP-2470883E001 12.92 18.8
我知道怎么用 line.split
来获取每个元素的数组。
我知道怎么在第二个数据集的第一列 L[6:4]
中查找,来得到匹配的四个字母的值。
我尝试了好几种建议的方法,但都没有成功。
我该如何将所有列合并成一行,并通过这个独特的四位数标识符连接起来呢?匹配这个独特的值,然后写到一行的过程让我感到困惑。
2 个回答
0
抱歉让你困惑了...
def parse(d1, d2):
d1 = d1.split('\n')
data1 = [x.split(',') for x in d1 if x]
d2 = d2.split('\n')
data2 = [x.split(' ') for x in d2 if x]
target = []
for x in data2:
d = [y for y in x if y]
dd = d[0].split('-')
dd.extend(d[1:])
target.append(dd)
ret = []
while data1:
x = data1.pop()
for y in target:
if x[0] == y[1]:
z = x
z.extend(y[-2:])
ret.append(z)
for x in ret:
print(x)
parse(data1, data2)
这里的data1和data2是文件里的内容
2
文件 dat1
的内容:
BEEC,BE-EC,,154.7,46.07,,31.63,54.6,4833.6,5.06
BPLZ,BE-LZ,,390.6,62.62,,49.0,145.0,27.3,61.52
BFLP,BF-OP,,180.1,34.89,,40.0,58.26,8533.8,7.31
文件 dat2
的内容:
MRM1234-BEEC-1635753E001 25.6 70.29
MRM1234-BPLZ-1814737E003 8.12 18.13
MRM1234-BFLP-2470883E001 12.92 18.8
使用这个简单粗暴的脚本,可以把两个文件的每一行合并在一起,像下面这样描述的。
dat1 = {}
with open('dat1') as f:
for line in f.readlines():
dat1[line.split(',')[0]] = line.strip().split(',')[1:]
dat2 = {}
with open('dat2') as f:
for line in f.readlines():
key = line.strip().split()[0].split('-')[1]
dat2[key] = line.strip().split()[1:]
for key in dat1.keys():
print("%s,%s,%s" % (key, str.join(',', dat1[key]), str.join(',', dat2[key])))
这样会产生以下输出结果。
BFLP,BF-OP,,180.1,34.89,,40.0,58.26,8533.8,7.31,12.92,18.8
BEEC,BE-EC,,154.7,46.07,,31.63,54.6,4833.6,5.06,25.6,70.29
BPLZ,BE-LZ,,390.6,62.62,,49.0,145.0,27.3,61.52,8.12,18.13