2014-10-24 1 views
-1

fasta 헤더를 제거하고 단백질 시퀀스를 문자열로 사용하여 변수를 만드는 추한 코드를 작성했습니다. 어떻게하면 더 효율적으로 할 수 있을까요? biopython에서 이것을 수행하는 좋은 방법이 있습니까? 내가 가장 많이 해 봤는데 실제로 무엇을, 언제 내 순서를 :fasta 파일에서 헤더를 제거하는 효율적인 방법 찾기 시도

f = open('protein1.fasta', 'r') 
raw_samples = f.readlines() 
f.close() 

samples = '' 

for elem in raw_samples: 
    if elem[0] == '>': 
     raw_samples = elem[1:].rstrip() 
    else: 
     samples += elem.rstrip() 

print samples 
+0

반복하는 동안 'raw_samples'를 덮어 쓰는 것입니다. 모든 샘플을 유지하는 대신 단일 요소로 설정하는 것입니다. 너가 너가 생각하는 것을 못 얻는 것 같아. –

답변

2

당신은, 당신이

from Bio import AlignIO 
alignment = AlignIO.read(open('protein1.fasta'), 'fasta') 
sequences = [record.seq for record in alignment] 

편집 할 수있는 바이오 파이썬으로

sequences = [] 
with open('protein1.fasta', 'r') as fin: 
    sequence = '' 
    for line in fin: 
     if line.startswith('>'): 
      sequences.append(sequence) 
      sequence = '' 
     else: 
      sequence += line.strip() 

같은 것을하고 싶어 줄 바꿈이 없으면 다음과 같습니다.

from itertools import izip_longest 
sequences = [] 
with open('protein1.fasta', 'r') as fin: 
    for header, seq in izip_longest(*[fin]*2): 
     sequences.append(seq) 

여기서 중요한 것은 파일 반복자 fin을 그 자체로 압축하는 zip(*[fin]*2)입니다 ([fin]*2 == [fin, fin]). 인해에.) 우리가 자체를 압축하는있는 파일 반복자 작동 방법 및 b.), 당신은 잘 맞는 시간에 두 줄을 산출

yield (fin.next(), fin.next()) 

으로 zip 작업을 생각할 수 있습니다 시퀀스에 줄 바꿈이없는 fasta 파일이 있습니다.

사전을 통해 액세스하는 경우, 변수를 저장하는 바이오 파이썬과 사전을 사용
+1

또는 정렬이 아닌 경우 AlignIO (및 AlignIO.read) 대신 SeqIO (및 SeqIO.parse)를 사용하십시오 – iayork

0

예는 현재 상황에서 유리하다 :

dct = {} 
for seq_record in SeqIO.parse(open(infile.fasta), "fasta"): 
    try: 
     dct['samples'].append(str(seq_record.seq).upper()) 
    except: 
     dct['samples'] = str(seq_record.seq).upper() 

많은 도구, FASTA 파일에 줄 바꿈을 소개 견고성 때문에, I biopython을 사용하여 파일을 가져옵니다. @wflynny biopython + list comprehension 솔루션이 더 효율적일 수 있지만 여러 변수가 있고 각 변수가 시퀀스에 연결된 경우 사전 메서드를 사용합니다

관련 문제