python 字符串可逆压缩_第5章 序列输入和输出 — Biopython-cn 0.1 文档

5.1.4 提取数据¶

SeqRecord 对象及其注释信息在第 4 章中有更详细的介绍。为了解释注释信息是如何存储的,我们从GenBank文件 ls_orchid.gbk 中解析出第一个序列条目,并将其输出:

from Bio import SeqIO

record_iterator = SeqIO.parse("ls_orchid.gbk", "genbank")

first_record = next(record_iterator.next())

print(first_record)

输出结果:

ID: Z78533.1

Name: Z78533

Description: C.irapeanum 5.8S rRNA gene and ITS1 and ITS2 DNA.

Number of features: 5

/sequence_version=1

/source=Cypripedium irapeanum

/taxonomy=['Eukaryota', 'Viridiplantae', 'Streptophyta', ..., 'Cypripedium']

/keywords=['5.8S ribosomal RNA', '5.8S rRNA gene', ..., 'ITS1', 'ITS2']

/references=[...]

/accessions=['Z78533']

/data_file_division=PLN

/date=30-NOV-2006

/organism=Cypripedium irapeanum

/gi=2765658

Seq('CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGG...CGC')

这可以得到 SeqRecord 大部分的易读的注释汇总信息。在此例中,我们将使用 .annotations 属性-即Python字典(dictionary)。该注释字典的内容如上述示例结果,你也可以直接输出:

print(first_record.annotations)

与其他Python字典一样,你可以轻松地获得键列表:

print(first_record.annotations.keys())

或者值列表:

print(first_record.annotations.values())

通常,注释值是字符串或者字符串列表。一个特例是,文件中的所有参考文献(references)都以引用(reference)对象方式存储。

例如你想从GenBank文件 ls_orchid.gbk 中提取出物种列表。我们需要的信息 Cypripedium irapeanum 被保存在这个注释字典的‘source’和‘organism’键中,我们可以用下面的方式获取:

>>>print(first_record.annotations["source"])

Cypripedium irapeanum

或:

>>>print(first_record.annotations["organism"])

Cypripedium irapeanum

通常,‘organism’ 用于学名(拉丁名,e.g. Arabidopsis thaliana ),而 ‘source’ 用于俗名(common name)(e.g. thale cress)。在此例中,以及在通常情况下,这两个字段是相同的。

现在,让我们遍历所有的序列条目, 创建一个包含所有兰花序列的物种列表:

from Bio import SeqIO

all_species = []

for seq_record in SeqIO.parse("ls_orchid.gbk", "genbank"):

all_species.append(seq_record.annotations["organism"])

print(all_species)

另外一种方式是使用列表解析:

from Bio import SeqIO

all_species = [seq_record.annotations["organism"] for seq_record in \

SeqIO.parse("ls_orchid.gbk", "genbank")]

print(all_species)

两种方式的输出结果相同:

['Cypripedium irapeanum', 'Cypripedium californicum', ..., 'Paphiopedilum barbatum']

因为GenBank文件注释是以标准方式注释,所以相当简单。

现在,假设你需要从一个FASTA文件而不是GenBank文件提取出物种列表,那么你不得不多写一些代码,用以从序列条目的描述行提取需要的数据。使用的示例FASTA文件 ls_orchid.fasta 格式如下:

>gi|2765658|emb|Z78533.1|CIZ78533 C.irapeanum 5.8S rRNA gene and ITS1 and ITS2 DNA

CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGGAATAAACGATCGAGTG

AATCCGGAGGACCGGTGTACTCAGCTCACCGGGGGCATTGCTCCCGTGGTGACCCTGATTTGTTGTTGGG

...

你可以手动检查,对于每一个序列条目,物种名都是描述行的第二个单词。这意味着如果我们以空白分割序列条目的 .description ,物种名将会是第1个元素(第0个元素是序列ID),我们可以这样做:

from Bio import SeqIO

all_species = []

for seq_record in SeqIO.parse("ls_orchid.fasta", "fasta"):

all_species.append(seq_record.description.split()[1])

print(all_species)

将得到:

['C.irapeanum', 'C.californicum', 'C.fasciculatum', 'C.margaritaceum', ..., 'P.barbatum']

使用更简洁的列表解析:

from Bio import SeqIO

all_species == [seq_record.description.split()[1] for seq_record in \

SeqIO.parse("ls_orchid.fasta", "fasta")]

print(all_species)

通常,对FASTA描述行提取信息不是那么方便。如果你能获得对目标序列注释很好的文件格式如GenBank或者EMBL,那么这类注释信息就很容易处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值