2016-06-20 4 views
0

swiss-port (ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.fasta.gz)의 fasta 파일을 사용하고 있는데, '>'으로 시작하는 줄에는 다음에 나오는 단백질의 정보가 있습니다. 산 서열.Swiss-Prot Fasta 파일에서 가져 오기 시퀀스

유전자 이름 ("GN=xxxxxxx"으로 표시된 줄에 x의 유전자 이름)을 사용하여 줄을 검색하고 이후에 오는 줄을 가져 오는 방법이 있습니까?

나는 줄의 중간에서 검색하고 다음 줄을 복사하는 루프를 만드는 데 문제가 있으므로이 문제로 고민하고 있습니다.

+0

어떤 OS를 사용하고 있습니까? –

답변

0

Linux를 사용하는 경우 sed, awktail/head에 대해 잘 알고 있어야합니다. 그들은 미래에 많은 시간을 절약 할 것입니다.

의 우리가

sed -n '/GN=FV3-002L/,/^>/p' uniprot_sprot.fasta | head -n -1 

-n 유전자 FV3-002L를 찾고 있습니다 가정 해 봅시다 : 그래서

GN=FV3-002L 말했을 때 인쇄 만 나오지도 알려줍니다 : 검색어

^> :의 끝을 당신의 검색, ^은 줄의 시작 부분이며 > FASTA 헤더의 시작 부분입니다.

파이썬을 사용하여의 마지막 라인을 제거하자 (더 나은 정규 표현식을 찾을 너무 게으른,하지만 당신이 얻을 생각)


:

/p : 경기

| head -n -1을 인쇄 나오지도 알려줍니다

gene = 'FV3-002L' 
gene_found = False 
fasta = '' 
with open('uniprot_sprot.fasta') as f: 
    for line in f: 
     if gene in line: 
      gene_found = True 
      fasta += line 
     elif gene_found and line.startswith('>'): 
      break 
     elif gene_found: 
      fasta += line 

print(fasta) 

스크립트는 uniprot 파일을 열고, 각 줄을 읽고, 유전자 이름이 있는지 확인하고, 그렇다면 다음 줄까지 모든 줄을 읽고 마지막으로 FASTA 시퀀스를 인쇄합니다.

참고 사항 :이 발췌 문장은 단일 예제에서 작동하지만 여러 유전자에도 적용 할 수 있습니다. 이 작업을 일상적으로 수행하려면 데이터를보다 효율적으로 처리하는 방법을 찾아야합니다. 생물학적 데이터를 조작하려면 BioPython을 볼 수도 있습니다.

관련 문제