BioPython(一)

本文详细介绍BioPython库的功能和使用方法,包括Seq对象的基本操作、GC含量计算、序列互补及反向互补、转录和翻译过程、SeqRecord类的应用、序列文件的输入输出以及格式转换,是生物信息学研究者的实用指南。
部署运行你感兴趣的模型镜像

BioPython使用手册https://biopython-cn.readthedocs.io/zh_CN/latest/index.html#

1.1 Seq 对象

Biopython处理序列的机制为Seq 对象,Seq对象支持常规字符串的很多方法,Seq 对象具有一个重要的属性alphabet ,这一对象用于描述由单个字母构成的序列字符串的mean(意义),以及如何解释这一字符串。

>>>from Bio.Seq import Seq
>>>from Bio.Alphabet import IUPAC
>>>my_seq = Seq("GATCG", IUPAC.unambiguous_dna)
>>>my_seq
Seq('GATCG', IUPACUnambiguousDNA())

1.2 计算GC含量

使用Bio.SeqUtils.GC() 函数时会自动处理序列和可代表G或者C的歧意核苷酸 字母S混合的情况:

>>>from Bio.SeqUtils import GC
>>>my_seq = Seq('GATCGATGGGCCTATATAGGATCGAAAATCGC', IUPAC.unambiguous_dna)
>>>GC(my_seq)
46.875

1.3 核苷酸序列和(反向)互补序列:

.reverse_complement()方法:

>>>my_seq = Seq("GATCGATGGGCCTATATAGGATCGAAAATCGC", IUPAC.unambiguous_dna)
>>>my_seq
Seq('GATCGATGGGCCTATATAGGATCGAAAATCGC', IUPACUnambiguousDNA())
>>>my_seq.complement() #互补
Seq('CTAGCTACCCGGATATATCCTAGCTTTTAGCG', IUPACUnambiguousDNA())
>>>my_seq.reverse_complement() #反向互补
Seq('GCGATTTTCGATCCTATATAGGCCCATCGATC', IUPACUnambiguousDNA())

1.4 转录和翻译

.transcribe()方法,.translate()方法:

>>>from Bio.Seq import Seq
>>>from Bio.Alphabet import IUPAC
>>>coding_dna = Seq("ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG", IUPAC.unambiguous_dna)
>>>coding_dna
Seq('ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG', IUPACUnambiguousDNA())
>>>template_dna = coding_dna.reverse_complement()
>>>template_dna
Seq('CTATCGGGCACCCTTTCAGCGGCCCATTACAATGGCCAT', IUPACUnambiguousDNA())
>>>messenger_rna = coding_dna.transcribe()#编码链直接转录
messenger_rna
Seq('AUGGCCAUUGUAAUGGGCCGCUGAAAGGGUGCCCGAUAG', IUPACUnambiguousRNA())
>>>template_dna.reverse_complement().transcribe() #模板链转录
Seq('AUGGCCAUUGUAAUGGGCCGCUGAAAGGGUGCCCGAUAG', IUPACUnambiguousRNA())
>>messenger_rna.back_transcribe() #逆转录
Seq('ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG', IUPACUnambiguousDNA())
>>>messenger_rna.translate() #翻译
Seq('MAIVMGR*KGAR*', HasStopCodon(IUPACProtein(), '*'))
>>>coding_dna.translate() #从编码链直接翻译
Seq('MAIVMGR*KGAR*', HasStopCodon(IUPACProtein(), '*'))
>>>coding_dna.translate(table="Vertebrate Mitochondrial")#通过指定密码子表进行特殊翻译如“线粒体密码子表”
Seq('MAIVMGRWKGAR*', HasStopCodon(IUPACProtein(), '*'))

1.5 SeqRecord (Sequence Record) 类

SeqRecord (Sequence Record) 类包含在Bio.SeqRecord 模块中,可以把identifiers 和featuresidentifiers等高级属性与序列关联起来。SeqRecord类中的format() 能将字符串转换成被 Bio.SeqIO 支持的格式。使用复杂,详见:https://biopython-cn.readthedocs.io/zh_CN/latest/cn/chr04.html

>>>from Bio.Seq import Seq
>>>from Bio.SeqRecord import SeqRecord
>>>from Bio.Alphabet import generic_protein
>>>record = SeqRecord(Seq("MMYQQGCFAGGTVLRLAKDLAENNRGARVLVVCSEITAVTFRGPSETHLDSMVGQALFGD" \
...                       +"GAGAVIVGSDPDLSVERPLYELVWTGATLLPDSEGAIDGHLREVGLTFHLLKDVPGLISK" \
...                       +"NIEKSLKEAFTPLGISDWNSTFWIAHPGGPAILDQVEAKLGLKEEKMRATREVLSEYGNM" \
...                       +"SSAC", generic_protein),
...                    id="gi|14150838|gb|AAK54648.1|AF376133_1",
...                    description="chalcone synthase [Cucumis sativus]")
>>>record.format("fasta")
'>gi|14150838|gb|AAK54648.1|AF376133_1 chalcone synthase [Cucumis sativus]
MMYQQGCFAGGTVLRLAKDLAENNRGARVLVVCSEITAVTFRGPSETHLDSMVGQALFGD
GAGAVIVGSDPDLSVERPLYELVWTGATLLPDSEGAIDGHLREVGLTFHLLKDVPGLISK
NIEKSLKEAFTPLGISDWNSTFWIAHPGGPAILDQVEAKLGLKEEKMRATREVLSEYGNM
SSAC'

1.6 序列输入和输出

1.6.1 解析/读取序列
Bio.SeqIO.parse(‘file’,‘format’) 用于读取序列文件生成 SeqRecord 对象,需要传入文件和格式两个参数,它返回一个 SeqRecord 对象迭代器( iterator ),迭代器通常用在循环中。需要处理只包含一个序列条目的文件,可使用函数Bio.SeqIO.read()

>>>from Bio import SeqIO
>>>for seq_record in SeqIO.parse("ls.fasta", "fasta"):
    print seq_record.id
    print repr(seq_record.seq)
    print len(seq_record)

1.6.2如果需要从文件中提取序列ID列表:

>>> from Bio import SeqIO
>>> identifiers = [seq_record.id for seq_record in SeqIO.parse("ls_orchid.gbk", "genbank")]
>>> identifiers
['Z78533.1', 'Z78532.1', 'Z78531.1', 'Z78530.1', 'Z78529.1', 'Z78527.1', ..., 'Z78439.1']

1.6.3遍历序列
除了使用for循环,还可以使用迭代器的.next()方法遍历序列条目,使用 .next() 方法,当没有序列条目时,将抛出StopIteration 异常。序列文件包含多个序列条目,而只需要第一个条目时,此方法更简洁;Bio.SeqIO.read() 函数同样用于读取第一条目录。

>>>from Bio import SeqIO
>>>record_iterator = SeqIO.parse("ls_orchid.fasta", "fasta")
>>>first_record = record_iterator.next()
>>>second_record = record_iterator.next()

1.7序列文件作为字典

(1)Bio.SeqIO.to_dict()最灵活但内存占用最大,每个条目以SeqRecord对象形式存储在内存中,允许修改这些条目。genbank格式下默认会使用每条序列条目的ID(i.e. .id 属性)作为键,fasta格式下默认使用序列名作为键,使用可选参数key_function指定键,然后通过键读取操作相关序列。

>>>SM667 = SeqIO.to_dict(SeqIO.parse("SM667.faa", "fasta"))
>>>SM667.keys()
dict_keys(['fig|1548889.4.peg.1', 'fig|1548889.4.peg.2' ...'fig|1548889.4.peg.3']
>>>len(SM667.keys())  #获取序列数
4658

(2)对于更大的文件,应该考虑使用 Bio.SeqIO.index(),它并不将所有的信息存储在内存中,它仅仅记录每条序列条目在文件中的位置 ,当需要读取某条特定序列条目时,它才进行解析,它不支持比对文件格式,如PHYLIP或Clustal。
(3)Bio.SeqIO.index_db() 。由于它将序列信息以文件方式存储在硬盘上(使用SQLite3数据库)而不是内存中,因此它可以处理超大文件。同时,你可以同时对多个文件建立索引(前提是所有序列条目的ID是唯一的)。它需要三个参数:
1)索引文件名,建议使用以.idx 结尾的字符,改索引文件实质上是SQLite3数据库
2)要建立索引的文件列表(或者单个文件名)
3)文件格式

>>>gb_vrl = SeqIO.index_db("gbvrl.idx", [files_list], "genbank")

对于较大的文件,第一次运行会消耗较长时间,但是建立索引后再次使用便很快了。三种方式各有优缺点,视情况选择使用。
(4)要建立索引的文件非常大时,可以使用samtools的命令行工具 bgzip创建BGZF格式压缩文件,Bio.SeqIO.index()Bio.SeqIO.index_db() 函数均可以用于BGZF压缩文件。

$ bgzip -c ls.gbk > ls.gbk.bgz
>>> from Bio import SeqIO
>>> orchid_dict = SeqIO.index("ls.gbk.bgz", "genbank")

(5)获取序列条目原始数据
因为Biopython的GenBank和EMBL格式输出并不会保留每一点注释信息,所以当需要大文件中提取出一个序列子集或者需要完整地保留源文件时,使用 get_raw() 方法,它仅需要一个参数序列ID,然后返回一个字符串(提取自文件的未处理数据)。

根据序列号提取子集:

>>>from Bio import SeqIO
>>> uniprot = SeqIO.index("uniprot_sprot.dat", "swiss")
>>> handle = open("selected.dat", "w")
>>> for acc in ["P33487", "P19801", "P13689", "Q8JZQ5", "Q9TRC7"]:
...     handle.write(uniprot.get_raw(acc))
>>> handle.close()

1.8 写入序列文件

使用 Bio.SeqIO.parse()输入序列(读取文件),使用Bio.SeqIO.write()输出序列(写入文件)。该函数需要三个参数:某些 SeqRecord 对象要写入的句柄或文件名序列格式

>>>from Bio import SeqIO
>>>SeqIO.write(my_records, "my_example.faa", "fasta")

1.9格式转换:

使用SeqRecord 对象列表作为Bio.SeqIO.write() 函数的输入,但是它也接受如来自于Bio.SeqIO.parse()SeqRecord 迭代器 ,因此通过结合使用这两个函数实现文件转换。

>>>from Bio import SeqIO
>>>gbk = SeqIO.parse("file1.gbk", "genbank")
>>>fasta = SeqIO.write(gbk, "file2.fasta", "fasta")

或者使用.convert()方法

fasta = SeqIO.convert("file1.gbk", "genbank", "file2.fasta", "fasta")

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,用户想了解或使用Biopython库,特别是它的使用方法和文档。首先,我需要回忆Biopython的基本信息和常见用途。Biopython个用于生物信息学的Python库,主要用于处理生物数据,比如DNA、RNA、蛋白质序列,以及结构分析、数据库交互等。用户可能是在生物信息学领域工作或学习的研究人员或学生。 接下来,用户需要的是使用方法和文档。我应该先介绍如何安装Biopython,因为这是第步。安装通常通过pip,所以需要给出安装命令:pip install biopython。然后需要提醒用户注意版本兼容性,可能存在的依赖问题,但通常Biopython的安装比较直接。 然后是基本用法。用户可能想知道如何读取和操作序列数据。例如,使用Seq对象处理DNA序列,这是Biopython的核心功能之。需要给出示例代码,比如创建Seq对象,展示转录、反向互补等操作。同时,要确保代码正确,并符合用户提供的格式要求,比如行内数学表达式用$...$,独立公式用$$...$$,但这里可能涉及较少数学公式,更多的是代码示例。 接下来是文件处理,比如读取FASTA文件。Bio.SeqIO模块是关键,需要演示如何读取FASTA文件并遍历序列。例如,使用SeqIO.parse函数,并展示循环打印每个序列的ID和长度。 然后是访问在线数据库,比如NCBI的Entrez接口。这部分需要提醒用户遵守使用条款,避免频繁请求。示例代码包括设置邮箱,使用Entrez.efetch获取序列数据,并用SeqIO读取返回的数据。 此外,可能需要提到其他功能,比如多序列比对(AlignIO)、BLAST接口、结构分析(Bio.PDB)等,但根据用户的问题,可能需要简要提及,让用户知道有这些功能即可。 文档资源方面,Biopython的官方文档是最重要的,需要给出链接,并提到教程、API文档和Cookbook。另外,可以推荐教程和书籍,比如《Biopython教程与手册》和《Python生物信息学》,这些资源能帮助用户深入学习。 相关问题部分,需要生成与Biopython相关的其他问题,例如安装问题、序列分析、与其它库的对比、处理特定文件格式、执行BLAST搜索等。这些问题应该覆盖用户可能进步询问的方向。 检查是否有引用需要添加。根据用户提供的引用,引用[1]提到Sphinx等文档生成工具,可能与Biopython的文档生成有关,但不确定是否直接相关。可能需要在文档部分提及Biopython的文档是用这些工具生成的,但如果没有明确关联,可能不需要强制引用。用户提供的引用可能更多是示例,所以这里可能不需要特别标注引用,除非直接相关。 最后,确保回答结构清晰,分步骤说明安装、基本用法、文件处理、在线数据库访问,以及文档资源,每个部分附上代码示例,并符合格式要求。同时,使用中文回答,避免使用Markdown,但用户允许在代码块中使用,所以代码部分用三个反引号包裹。</think>### Biopython库使用指南 Biopython是专为生物信息学设计的Python工具库,提供序列分析、结构解析、数据库交互等功能[^1]。 #### 1. 安装方法 ```bash pip install biopython ``` #### 2. 核心功能演示 **(1) 序列对象操作** ```python from Bio.Seq import Seq dna_seq = Seq("ATGCTAGCTAG") print(dna_seq.transcribe()) # RNA转录 print(dna_seq.reverse_complement()) # 反向互补 ``` **(2) FASTA文件解析** ```python from Bio import SeqIO for record in SeqIO.parse("sequences.fasta", "fasta"): print(f"ID: {record.id}, 长度: {len(record.seq)}") ``` **(3) NCBI数据库访问** ```python from Bio import Entrez Entrez.email = "user@example.com" with Entrez.efetch(db="nucleotide", id="NM_001301717", rettype="fasta") as handle: seq_record = SeqIO.read(handle, "fasta") ``` #### 3. 文档资源 - [官方文档](https://biopython.org/wiki/Documentation)含API参考和实例教程 - 《Biopython教程与手册》提供实际案例分析 - 模块结构图示: ``` Bio/ ├── Seq # 序列操作 ├── Align # 多序列比对 ├── PDB # 蛋白质结构 └── Entrez # 数据库接口 ``` #### 4. 高级应用场景 - 基因组注释:通过$GC$含量分析识别编码区域 - 系统发育分析:使用$$ \text{遗传距离矩阵} = \begin{bmatrix} 0 & d_{12} \\ d_{21} & 0 \end{bmatrix} $$构建进化树 - 蛋白质结构可视化:解析PDB文件中的三维坐标
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值