2016-08-09 3 views
1

У меня есть 2 больших файла .txt, и каждый файл имеет 10 столбцов и 21008 строк. Мне нужно получить общие строки из двух файлов и создать новый файл. Первый столбец из двух файлов включает идентификаторы. Некоторые идентификаторы в 2 файлах похожи, но не все из них. Новые файлы будут содержать общие идентификаторы и, конечно, полную строку. Вот небольшой пример:Общие строки из двух файлов .txt в python

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 

input2:

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  

Tha nks

+1

Может ли один из файлов содержать повторяющиеся строки? – DeepSpace

+0

нет. в каждом файле нет дублированной строки. – user3925736

+0

Я не против, если это включено или нет. – user3925736

ответ

0

Прочитайте первый файл и итерации по строкам, для каждой строки сохраняйте идентификатор и строку. Сделайте это для следующего только на этот раз найти общие строки по идентификатору и добавить затем в список в формате вывод:

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)) 
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 
0

Вот рабочий раствор (с использованием списков) для вашей проблемы. В конце вы получите список со всеми строками с одинаковым идентификатором в файле с именем «res»

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') 
Смежные вопросы