これは、小さなシーケンスでは非常に困難です。例えば、A
,C
およびG
という文字は3つのアルファベットすべてに共通であるため、配列ACGCGACAGA
はDNA、RNAまたはタンパク質配列の両方でありうる。他の知識がなければ、どちらが最良のマッチであるかを推定することは不可能である。
次のコードは、与えられたFASTAファイルの最初のレコードが属するすべてのアルファベットプリントアウトします:だから、
from Bio import SeqIO
from Bio.Alphabet.IUPAC import *
alphabets = [extended_protein, ambiguous_dna, unambiguous_dna, extended_dna, ambiguous_rna, unambiguous_rna]
def validate(seq, alphabet):
"Checks that a sequence only contains values from an alphabet"
# inspired by https://www.biostars.org/p/102/
leftover = set(str(seq).upper()) - set(alphabet.letters)
return not leftover
with open("example.fasta") as handle:
first_record = list(SeqIO.parse(handle, "fasta"))[0]
valid_alphabets = [str(alphabet) for alphabet in alphabets if validate(first_record.seq, alphabet)]
print("Valid alpahabet(s) for fasta file: {}".format(', '.join(valid_alphabets)))
をシーケンスACGCGACAGA
のためにこれを印刷します:
Valid alpahabet(s) for fasta file: ExtendedIUPACProtein(), IUPACAmbiguousDNA(), IUPACUnambiguousDNA(), ExtendedIUPACDNA(), IUPACAmbiguousRNA(), IUPACUnambiguousRNA()
をしかし、シーケンスMKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVFX
の場合:
Valid alpahabet(s) for fasta file: ExtendedIUPACProtein()
これはすでに私のpを解決します汚れ。ありがとうございました。私はもっと多くは期待できないことを知っていますが、多くの場合、多くのシーケンスがあると、あなたのコードはそれをかなり釘付けにします。 – romeasy