문제

큰 Fasta 파일과 함께 큰 폭발 파일을 처리하고 있으며, 한 줄의 블록에 여러 줄의 Fasta를로드해야합니다 (한 줄이라고 가정 해 봅시다).

Blast의 두 번째 루프 (라인)에서 마지막으로 처리 된 Fasta 라인에서 다음 줄에서 계속 될 것으로 예상하지만 동일한 Fasta 라인을 모두로드하고 있습니다. 왜요? 다음 줄을 어떻게로드 할 수 있습니까? 인덱싱을 추가해야합니까?

with open(fastaname,'r') as fastafile:
  with open(blastfilename,'r') as blastfile:
    for line in blastfile:
      while True:  
        fastaline = fastafile.readline()[:-1]  
            if fastaline[0]=='>':  
                break  
            fastaseq += fastaline
      somefunction(line,fastaseq)

Fasta에는 일반적인 형식이 있습니다.

>name_of_seqence\n  
ACGATCATCGTAGCTGCATGACTGCA\n  
GATCGATCTGATCGATGCAGTCAGTA\n
>name_of_seqence\n  
GCACGCGACCACGATCATTGACTGCA\n  
CAAAAGATCTGATCGATGCAGTCAGT\n
CAGTCGATGCTAGTCGATGCTCGATA\n
etc.

다음 폭발 시퀀스의 모든 라인마다 각 순서가 필요합니다.

도움이 되었습니까?

해결책

나는 당신이 추가 한 줄을 깨끗이 할 수있는 것은 없습니다. fastaseq 폭발 파일에서 줄을 마친 후. 이 시도:

with open(fastaname,'r') as fastafile:
    with open(blastfilename,'r') as blastfile:
        for line in blastfile:
            fastaseq = '' # or whatever data type this is 
            while True:  
                fastaline = fastafile.readline()[:-1]  
                if fastaline[0]=='>':  
                    break  
            fastaseq += fastaline
        somefunction(line,fastaseq)

첫 번째 폭발 라인이기 때문에 첫 번째 Fasta 라인 세트를 얻을 수 있으므로 두 번째 폭발 라인은 첫 번째 및 두 번째 세트 등을 얻습니다.

다른 팁

Fasta 파일을 직접 구문 분석하는 대안은 Biopython 's와 같은 기존 파서를 사용하는 것입니다. SeqIO.

당신은 또한 사용할 수 있습니다 zip() 두 개의 반복적 인 반복을 나란히 반복합니다.

사용 바이오 파티 톤, 코드는 다음과 같습니다.

from Bio import SeqIO

with open(fastaname, 'r') as fastafile, open(blastname, 'r') as blastfile:
    for record, line in zip(SeqIO.parse(fastafile, 'fasta'), blastfile):
        somefunction(line, record.seq)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top