작은 시퀀스의 경우 매우 어렵습니다. 예를 들어, A
, C
및 G
문자는 3 개의 알파벳 모두에 공통이므로, 서열 ACGCGACAGA
은 DNA, RNA 또는 단백질 서열 일 수있다. 다른 지식이 없으면 어떤 것이 가장 일치하는지 평가하는 것은 불가능합니다.
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
이 인쇄됩니다 :
이
모든 알파벳을 인쇄 할 다음 코드는 주어진 FASTA 파일의 첫 번째 레코드가 속하는
Valid alpahabet(s) for fasta file: ExtendedIUPACProtein(), IUPACAmbiguousDNA(), IUPACUnambiguousDNA(), ExtendedIUPACDNA(), IUPACAmbiguousRNA(), IUPACUnambiguousRNA()
그러나 시퀀스 MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVFX
의 경우 :
Valid alpahabet(s) for fasta file: ExtendedIUPACProtein()
이것은 이미 내 p를 해결합니다. 흠집. 고맙습니다. 나는 더 많은 것을 기대할 수 없다는 것을 알고 있지만, 많은 시퀀스가있을 때 대부분의 경우에 코드가 꽤 많이 내려 간다. – romeasy