私は2つのファイルを比較し、他のもののサブセットを持つシーケンスを抽出しようとしています。そして、私は識別子も抽出したいと思います。しかし、私ができることは、サブセットを含むシーケンスを抽出できることです。サンプルファイルは、次のとおりです。既知のシーケンスで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
:出力として、私は唯一の最初の試合で一つの配列を取得することができ、
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
たぶん私は2番目のファイルなしでそれを行うことができますが、私は配列およびそれらのそれぞれのヘッダを取得するには、右のループを作ることができませんでした。したがって、私は遠くに行った..
私はあなたが助けることができれば幸せだろう!
これはエラーです:すべて[num-1]、これはあなたのリストではありませんが、Pythonの機能です。スペルが間違っていましたか? "s"はありません – Bestasttung
@Bestasttungありがとうございます!私は気付きませんでした。今、私はエラーを持っていないが、望ましくない出力を得る。私は質問を編集しています。 – bapors