2014-04-06 4 views
1

탭으로 구분 된 침대 파일에 원래의 게놈 좌표 집합 (chrom, start, end)이 있습니다. 또한 원래의 게놈 좌표와 각 좌표와 관련된 숫자 값을 포함하는 탭으로 구분 된 침대 파일이 추가로 있습니다. 이러한 좌표는 매번 다른 숫자 값으로 침대 파일에 여러 번 나타날 수 있습니다. 그 특정 좌표와 관련이있는 것으로 밝혀진 모든 값의 합계 수로 원래 게놈 좌표를 각각 포함하는 최종 침대 파일이 필요합니다. 내가 작업하고있는 파일의 예가 아래와 같습니다.한 파일의 좌표를 사용하고 다른 파일의 좌표와 일치하는 값을 추가하는 Python 스크립트

원본 파일 :

chr1 2100 2300 

chr2 3300 3600 

chr1 2560 2800 

다른 침대 파일 :

chr1 2100 2300 6 

chr2 3300 3600 56 

chr1 2100 2300 10 

필요한 출력 파일 :

chr1 2100 2300 16 

chr2 3300 3600 56 

chr1 2560 2800 0 
N

내가 이 작업을 수행하는 파이썬 스크립트를 작성하는 eed하지만, 최선의 방법은 무엇인지 모르겠습니다.

+0

에 오신 것을 환영합니다 그래서! -) 아래 답변 중 하나가 문제를 해결하면 해당 답변 옆에있는 체크 표시를 클릭하여 동의해야합니다. 그것은 두 가지 일을합니다. 모든 사람에게 문제가 해결되었음을 알리고 도움을 제공하는 사람에게 도움을줍니다. 자세한 내용은 [here] (http://meta.stackexchange.com/a/5235/187716)를 참조하십시오. –

답변

0
def fetch_data(filename1, filename2): 
    lines = [] 
    data = {} 
    with open (filename1) as f: 
     lines = f.readlines() 

    for line in lines: 
     if not line.strip(): 
      continue 
     data[' '.join(line.split())] = 0 

    with open (filename2) as f: 
     lines = f.readlines() 

    for line in lines: 
     if not line.strip(): 
      continue 
     arr = line.split() 
     data[' '.join(arr[:-1])] += int(arr[3]) 

    return data 


with open ('output.txt', 'w') as f: 
    for key,value in fetch_data('original.txt','data.txt').iteritems(): 
     f.write('{0} {1} \n\n'.format(' '.join(key.split()), str(value))) 
+0

Im KeyError를받는 중 : 'chr1 2100 2300'행 데이터 [ ''.join (arr [: - 1 ])] + = int (arr [3]) – user3504464

+0

코드를 업데이트했습니다. 다시 시도 plz –

1

이 팬더는 정말 쉽게 그런 것들 중 하나입니다

import pandas 
coordnames = ['Name', 'x', 'y'] 
f1 = pandas.read_table('file1', delimiter=r' +', 
         names=coordnames).dropna() 
f2 = pandas.read_table('file2', delimiter=r' +', 
         names=coordnames + ['n']).dropna() 
result = (f1.merge(f2, on=coordnames, how='left') 
      .groupby(coordnames).sum().fillna(0)) 
+0

+1 for pandas -) –

관련 문제