私は解析中のfastaファイルを持っています。このファイルは、異なる細菌株由来の同じ遺伝子に属するいくつかの配列からなる。私は何をしたいのですか?スクリプトは、シーケンスが参照seqと等しいかどうかをチェックすることです。その情報で私は新しいファイルを作りたいと思っていますが、それぞれのシーケンスは1つだけです。biopythonを用いたシーケンスによるfastaファイルからの遺伝子抽出
def checking_sequences():
gene_records=list(SeqIO.parse('/files/gene_A.fasta', 'fasta'))
ref_id=gene_records[-1].id
ref_seq=gene_records[-1].seq
#print gene_records[-1].description
output_handle=open('//files/' + 'corrected_gene_1', 'a')
print len(gene_records)
count=0
dif_count=0
reference_list=[]
for gene_record in gene_records:
#count+=1
if len(gene_record.seq) == len(ref_seq):
#print len(gene_records.seq)
#print len(ref_seq)
print 'Found all lengths are equal'
else:
print 'Found %s sequence with different lengths' % (gene_records.description)
###checking sequence equality
if gene_record.seq==ref_seq:
count+=1
gene_record.id=gene_record.id +'_0'
reference_list.append(gene_record)
ref_count=reference_list.count(gene_record.seq)
print 'There are %i sequences are equal to the reference sequence' %(count)
else:
dif_count+=1
reference_list.append(gene_record.seq)
seq_count=reference_list.count(gene_record.seq)
gene_record.id=gene_record.id +'_'+ str(dif_count)
print 'Found %i different that ref_seq' % (seq_count)
print 'xxxxxxxxxxx'
#print seq_count
#print len(reference_list)
SeqIO.write(gene_record, output_handle, 'fasta')
output_handle.close()
checking_sequences()いくつかの明確化のために :
original file desire output
>gene_1 strainIDx >gen1_strainIDx
seqA seqA
>gene_1 strainIDy >gene_1 strainIDy
seqB seqB
>gene_1 strainIDz
seqA
私はちょうど私がそれぞれの1つの配列を持ちたいIDについては気にしません。私は 'ブレーク'を使用しようとしましたが、私が望む出力は得られません。ヘルプ
そして、私のスクリプトのwihich部分で、私は、それをしてください置くべきか? – Ana
私はあなたのコードを非常に理解していません。ファイルを作成する前に、まずlen(seq)が等しいかどうかを調べる必要があります。等しい場合は、ファイルに追加します。今私は非常に困惑しています。 – Ana
@Ana:等しい長さは等しい配列を意味するのではなく、「ハッシュ」と同じです。私のサンプルコード**はすべての重複したシーケンスをフィルターに掛けます**。それに応じて別の条件[編集]が必要な場合。 – stovfl