Biopython之序列输入

Biopython

1.序列输入

主要功能是Bio.SeqIO.parse()获取file handle(或文件名)和格式名称,并返回 SeqRecord迭代器。这使您可以执行以下操作:

from Bio import SeqIO
for record in SeqIO.parse("example.fasta", "fasta"):
    print(record.id)

or using a handle:

from Bio import SeqIO
with open("example.fasta", "r") as handle:
    for record in SeqIO.parse(handle, "fasta"):
        print(record.id)

请注意,您必须明确指定文件格式,这与BioPerl的SeqIO不同 ,后者可以尝试使用文件扩展名和/或文件内容进行猜测。

如果您使用其他类型的文件,例如Clustalw对齐文件(例如 opuntia.aln 包含七个序列),则唯一的区别是您指定 "clustal"而不是"fasta"

from Bio import SeqIO
with open("opuntia.aln", "r") as handle:
    for record in SeqIO.parse(handle, "clustal") :
        print(record.id)

当您只需要按文件中找到的顺序一个一记录时,迭代器非常有用。对于某些任务,您可能需要以任意顺序随机访问记录。在这种情况下,请使用内置的python list()函数将迭代器转换为列表:

from Bio import SeqIO
records = list(SeqIO.parse('./test.fa','fasta'))
print(records[0].id)
print(records[-1].id)

AT1G16710.2
AT1G32510.1

另一个常见的任务是通过一些标识符来索引您的记录。对于小文件,我们具有Bio.SeqIO.to_dict()SeqRecord迭代器(或列表)转换为字典(在内存中)的功能:

from Bio import SeqIO
record_dict = SeqIO.to_dict(SeqIO.parse("test.fa", "fasta"))
print(record_dict["AT1G32510.1"])  # use any record ID

ID: AT1G32510.1
Name: AT1G32510.1
Description: AT1G32510.1 cds chromosome:TAIR10:1:11756691:11758118:1 gene:AT1G32510 gene_biotype:protein_coding transcript_biotype:protein_coding gene_symbol:ANAC011 description:NAC011 [Source:UniProtKB/TrEMBL;Acc:A0A178WL27]
Number of features: 0
Seq('ATGGTAGGATCATTTTTACCACCTGGTTTCAGATTTTATCCAACAGATGAAGAA...TAA', SingleLetterAlphabet())

由于返回的是一个字典,所以可以通过访问字典的方法查看字典的keys()和values()

from Bio import SeqIO
record_dict = SeqIO.index("test.fa", "fasta")
for eachkey in record_dict.keys():
        print(eachkey)
AT1G16710.2
AT1G15825.1
AT1G48390.1
AT3G01040.1
AT1G08970.4
AT4G17470.1
AT5G11840.4
AT4G17950.1
AT1G57765.2

Bio.SeqIO.to_dict()默认情况下,该函数会将记录ID用作字典,但是您可以使用其可选参数来指定所需的任何映射key_function。

对于较大的文件,不可能将所有内容都保存在内存中,因此 Bio.SeqIO.to_dict不合适。Biopython 1.52 inwards包含Bio.SeqIO.index针对这种情况的功能,但您也可以考虑使用BioSQL

from Bio import SeqIO
record_dict = SeqIO.index("test.fa", "fasta")
print(record_dict["AT1G32510.1"])  # use any record ID

ID: AT1G32510.1
Name: AT1G32510.1
Description: AT1G32510.1 cds chromosome:TAIR10:1:11756691:11758118:1 gene:AT1G32510 gene_biotype:protein_coding transcript_biotype:protein_coding gene_symbol:ANAC011 description:NAC011 [Source:UniProtKB/TrEMBL;Acc:A0A178WL27]
Number of features: 0
Seq('ATGGTAGGATCATTTTTACCACCTGGTTTCAGATTTTATCCAACAGATGAAGAA...TAA', SingleLetterAlphabet())

Biopython 1.45引入了另一个函数Bio.SeqIO.read(),它与Bio.SeqIO.parse()一样,需要一个handle和格式。。当handle包含一个且只有一个记录(作为单个SeqRecord对象返回,即单条序列)时使用。如果没有记录或多于一个记录,则会引发异常:

from Bio import SeqIO
record = SeqIO.read("single.fasta", "fasta")

对于只需要第一条记录(并且乐于忽略任何后续记录)的相关情况,可以使用内置的python函数next:

from Bio import SeqIO
first_record = next(SeqIO.parse("example.fasta", "fasta"))

你可能感兴趣的:(Biopython之序列输入)