python中两个.txt文件的常见行

时间:2016-08-09 14:27:03

标签: python text

我有2个大的.txt文件,每个文件有10列和21008行。我需要获取两个文件的常见行并创建一个新文件。两个文件的第一列包含ID。 2个文件中的一些ID是相似的,但不是全部。新文件将包含公共ID,当然还有完整的行。这是一个小例子:

INPUT1:

ENSG00000137288.5   0,111111112 0,099415205 0,894736842 
ENSG00000116085.9   0,086826347 0,152694613 1,758620722 
ENSG00000167578.12  0,052093968 0,096016347 1,843137535 
ENSG00000167531.2   0,042553194 0,085106388 2   
ENSG00000078237.4   0,016129032 0   0   0,031746034 

输入2:

ENSG00000137288.5   0,167213112 0,134426236 0,803921621 
ENSG00000116032.5   0,094311371 0,144461095 1,531746311 
ENSG00000167578.12  0,062894806 0,101620428 1,615720507 
ENSG00000103227.14  0,067720085 0,068472534 1,011111165 
ENSG00000078241.8   0,016260162 0,040650405 2,5 

输出文件:

ENSG00000137288.5   0,111111112 0,099415205 0,894736842 ENSG00000137288.5   0,167213112 0,134426236 0,803921621     
ENSG00000167578.12  0,052093968 0,096016347 1,843137535 ENSG00000167578.12  0,062894806 0,101620428 1,615720507     

由于

3 个答案:

答案 0 :(得分:0)

读取第一个文件并逐行迭代,每行保留id和line。只有这一次才能为下一个查找公共行,然后按照输出格式附加到列表中:

ids = {}
found = []
with open(filepath1) as file1:
    for line in file1.lines():
        id_ = line.split()[0]
        ids[id_] = line

with open(filepath2) as file2:
    for line in file2.lines():
        id_ = line.split()[0]
        if id_ in ids:
            found.append("{} {}".format(ids[id_], line))

答案 1 :(得分:0)

您可以使用dict跟踪第二个文件中显示的行,以允许第一个设置顺序:

d2={}
with open("f2.txt") as f2:
    for line in f2:
        k,_,v=line.partition(' ')
        d2[k]=line.strip()

with open("f1.txt") as f1:
    for line in f1:
        k,_,v=line.partition(' ')
        if k in d2:
            print line.strip(), d2[k]

打印:

ENSG00000137288.5   0,111111112 0,099415205 0,894736842 ENSG00000137288.5   0,167213112 0,134426236 0,803921621
ENSG00000167578.12  0,052093968 0,096016347 1,843137535 ENSG00000167578.12  0,062894806 0,101620428 1,615720507

答案 2 :(得分:0)

这是针对您的问题的工作解决方案(使用列表)。最后,您将获得一个列表,其中包含名为“res”的文件中具有相同ID的所有行

l1 = []
l2 = []

with open('file1', 'r') as f1:
    for line in f1:
        line = line.split()
        l1.append(line)

with open('file2', 'r') as f2:
    for line in f2:
        line = line.split()
         l2.append(line)

res = [i + j for i, j in zip(l1, l2) if i[0] == j[0]]

target = open('res', 'w')
for i in res:
    for j in i:
        target.write(j)
        target.write(' ')
    target.write('\n')