如何在python中围绕公共值合并两个文本文件

时间:2014-06-20 19:57:43

标签: python python-3.x

我有两个不同的文件。

我需要将这些合并到一个文件中。有一个共同的价值。这两个文件都有这种格式。比赛不会按顺序进行。 Dataset1 line1可能与dataset2 line1不匹配。更有可能的是,dataset1 line1将匹配dataset2第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]以获得匹配的4个字母值。

我尝试了几种方法,但没有成功。

如何合并由唯一4位数字标识符连接的单行中的所有列?匹配唯一值然后写入一行就不包括在内。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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是文件的内容