通过匹配python中列的项来合并两个tsv文件

时间:2017-05-17 01:07:53

标签: python merge

我有两个制表符分隔(tsv)文件。我想在tsv文件中获得与两个文件的特定列的项匹配的输出。我是python的新手,如果我得到一些评论会很棒。

输入file1:

#comment one
#comment two and more
ab123    1    339    GT    +  s4
ab222    3    23    CT    -  se4
ab1100    3    523    AA    +  aa11
ab2211    20    166    TT    +  ss

输入file2:

ab123    1
ab1100    3

预期输出是输入file1的前4列,匹配file2的第1列:

ab123    1    339    GT 
ab1100    3    523    AA 

我正在尝试的代码是:

with open("file1") as data:
        for line1 in data:
                with open("file2") as id:
                    for line2 in id:
                        if str(line2) in line1:
                            print line1

2 个答案:

答案 0 :(得分:1)

我的方法是使用file1生成一个dict并迭代通过阅读file2生成的列表,并扩展此列表,然后使用join()方法打印它:< / p>

with open('1.csv') as f1, open('2.csv') as f2:
    d1 = {tuple(i.split()[:2]): i.split()[2:] for i in f1.read().split('\n')}

    for i in f2.read().split('\n'):
        tmp = i.split()
        if tuple(tmp[:2]) in d1:
            print(" ".join(tmp+(d1[tuple(tmp[:2])][:2])))

输出:

ab123 1 339 GT
ab1100 3 523 AA

希望这有帮助。

答案 1 :(得分:0)

您可以尝试使用csv模块阅读tab-separated值文件(tsv文件),只需提及delimiter='\t',下面是代码:

import csv
with open('file1.tsv','rb') as tsv1 , open('file2.tsv', 'rb') as tsv2:
    tsv1 = csv.reader(tsv1, delimiter='\t')    
    tsv2 = csv.reader(tsv2, delimiter='\t')
    tsv1_list=list(tsv1)
    tsv2_list=list(tsv2)
    result = [e1[:4] for e1 in tsv1_list for e2 in tsv2_list if e1[0]==e2[0]]
    print result

输出:

[['ab123', '1', '339', 'GT'], ['ab1100', '3', '523', 'AA']]