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"))
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 8,213评论 0 9
  • 为了吃上一顿美食,吃货历来都不会嫌弃走多远的路,等多久的时间。 曾经有个朋友,听说某地的小米粥熬的很地道,竟然可以...
    遥望远方的田野阅读 2,713评论 0 0
  • 白色的浪涌上岸来 爱太满 思念溢出了海平面 成群结队的海鸥飞过海平面 暴风雨太急 思绪涨起了潮 雨滴落进了大海 思...
    玉儿梵蒂冈阅读 2,490评论 0 3
  • 海棠一树春,桃花遍地焚,柳絮如烟落,光景一时新。[耶]
    马贞晓阅读 1,648评论 0 0
  • 对“谁主张谁举证”的理解 不能简单地认为原告应当对其“主张”承担所有证明责任。 要严格辨别原、被告何者“主张法律关...
    向前宝宝是个宝阅读 6,096评论 0 0

友情链接更多精彩内容