두 파일을 비교하고 다른 파일의 하위 집합이있는 시퀀스를 추출하려고합니다. 그리고 식별자도 추출하고 싶습니다. 그러나 내가 할 수있는 것은 부분 집합을 포함한 시퀀스를 추출 할 수 있다는 것입니다. 예제 파일은 다음과 같습니다알려진 시퀀스로 fasta 파일에서 시퀀스 및 헤더 추출
text.fa
>header1
ETTTHAASCISATTVQEQ*TLFRLLP
>header2
SKSPCSDSDY**AAA
>header3
SSGAVAAAPTTA
하고, 내가 코드를 실행하면
textref.fa
>textref.fa
CISA
AAAP
AATP
, 나는이 출력 데 : 그러나
ETTTHAASCISATTVQEQ*TLFRLLP
SSGAVAAAPTTA
을, 내 예상 출력 헤더입니다 :
>header1
ETTTHAASCISATTVQEQ*TLFRLLP
>header3
SSGAVAAAPTTA
내 코드는 2입니다. 나는이 text.fa
의 시퀀스를 데,이 sequencesmatched.txt
에,
def get_nucl(filename):
with open(filename,'r') as fd:
nucl = []
for line in fd:
if line[0]!='>':
nucl.append(line.strip())
return nucl
def finding(filename,reffile):
nucl = get_nucl(filename)
with open(reffile,'r') as reffile2:
for line in reffile2:
for element in nucl:
if line.strip() in element:
yield(element)
with open('sequencesmatched.txt','w') as output:
results = finding('text.fa','textref.fa',)
for res in results:
print(res)
output.write(res + '\n')
그래서 : 부분은 첫째 나는이 시퀀스 파일을 만든 다음 나는 원래 FASTA 파일에서 자신의 헤더를 추출하려고 하위 문자열은 textref.fa
입니다. 같이 출력으로서, I는 첫 번째 일치하는 하나의 시퀀스를 검색 할 수
def finding(filename,seqfile):
with open(filename,'r') as fastafile:
with open(seqfile,'r') as sequf:
alls=[]
for line in fastafile:
alls.append(line.strip())
print(alls)
sequfs = []
for line2 in sequf:
sequfs.append(line2.strip())
if str(line.strip()) == str(line2.strip()):
num = alls.index(line.strip())
print(alls[num-1] + line)
print(finding('text.fa','sequencesmatched.txt'))
그러나 :
ETTTHAASCISATTVQEQ*TLFRLLP
SSGAVAAAPTTA
그래서 다른 부분에서, 각각 헤더 및 이들 서열을 검색 할 수 :
>header1
ETTTHAASCISATTVQEQ*TLFRLLP
어쩌면 내가 두 번째 파일없이 그것을 할 수 있지만 오른쪽의 순서 및 각각의 헤더를 얻기 위해 루프를 만들 수 없습니다. 따라서, 나는 먼 길을 갔다. ..
당신이 도울 수 있으면 나는 행복 할 것이다! 당신은 당신의 파일이 항상 동일한 구조 인 경우 훨씬 쉽게 일을 할 수
이것은 오류입니까? all [num-1], 그것은 귀하의 목록이 전부가 아니며, 파이썬으로 된 것입니다. 맞춤법을 놓친 거니? "s"가 빠졌습니다 – Bestasttung
@Bestasttung 고마워요! 나는 통보하지 않았다. 이제는 오류가 발생하지 않지만 원하지 않는 결과를 얻지는 않습니다. 나는 그 질문을 편집하고있다. – bapors