📜  Biopython – 序列输入输出(1)

📅  最后修改于: 2023-12-03 14:59:31.368000             🧑  作者: Mango

Biopython – 序列输入输出

Biopython是一个Python生物信息学库,它包含了处理生物序列数据的工具和算法,可以很方便地对DNA、RNA、蛋白质等进行分析、操作和可视化。其中,序列输入输出是Biopython最基本的功能之一,使我们能够方便地读取和写入各种格式的生物序列文件。

安装Biopython

如果你还没有安装Biopython库,可以通过下面的命令来进行安装:

pip install biopython

序列文件格式

Biopython支持的序列文件格式很多,包括FASTA、GenBank、BLAST、Phylip、Clustal等常用格式。下面我们分别介绍一下这些格式的特点。

FASTA

FASTA格式是一种以’>‘开头的文本文件格式,其后跟着序列的名称和序列信息,序列信息可以是单行序列或多行序列。下面是一个例子:

>sequence1
ATCGATCGATCGATCGATCG
>sequence2
GCTAGCTGACTGATCGAT

在Biopython中,我们可以使用SeqIO模块来读取和写入FASTA格式的序列文件。

from Bio import SeqIO

# 读取FASTA文件
records = SeqIO.parse("sequences.fasta", "fasta")
for record in records:
    print(record.id) # 序列名称
    print(record.seq) # 序列信息

# 写入FASTA文件
record1 = SeqIO.SeqRecord(Seq("ATCGATCGATCGATCGATCG"), "sequence1")
record2 = SeqIO.SeqRecord(Seq("GCTAGCTGACTGATCGAT"), "sequence2")
records = [record1, record2]
SeqIO.write(records, "sequences.fasta", "fasta")
GenBank

GenBank是一种由美国国家生物技术信息中心(National Center for Biotechnology Information, NCBI)维护的生物序列数据库,GenBank格式是一种以’//‘结尾的文本文件格式,其包含序列的名称、源信息、特征信息以及其他注释信息。下面是一个例子:

LOCUS       sequence1     100 bp    DNA             
DEFINITION  DNA sequence for sequence1.
ACCESSION   A12345      
VERSION     A12345.1    
KEYWORDS    .
SOURCE      
  ORGANISM  .
FEATURES             Location/Qualifiers
     source          1..100
ORIGIN      
        1 ATCGTCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGAT 60
// 

在Biopython中,我们可以使用SeqIO模块来读取和写入GenBank格式的序列文件。

from Bio import SeqIO

# 读取GenBank文件
records = SeqIO.parse("sequences.gbk", "genbank")
for record in records:
    print(record.id) # 序列名称
    print(record.seq) # 序列信息
    print(record.features) # 特征信息

# 写入GenBank文件
record = SeqIO.SeqRecord(Seq("ATCGATCGATCGATCGATCG"), id="sequence1", description="DNA sequence for sequence1")
record.features = []
records = [record]
SeqIO.write(records, "sequences.gbk", "genbank")
BLAST

BLAST格式是一种以’#‘开头的文本文件格式,其包含查询序列、比对序列、比对得分以及其他信息。下面是一个例子:

BLASTN 2.6.0+
Reference: Zheng Zhang, Scott Schwartz, Lukas Wagner, and Webb
Miller (2000), "A greedy algorithm for aligning DNA sequences", J
Comput Biol 2000; 7(1-2):203-14.

Query= sequence1
Length=100

                                                                      Score        E
Sequences producing significant alignments:                          (Bits)     Value

  sequence2                                                            60        2e-10

...

# BLAST processed 1 queries

在Biopython中,我们可以使用NCBIXML模块来读取和写入BLAST格式的序列文件,也可以使用SeqIO模块将BLAST结果转化为FASTA格式。

from Bio.Blast import NCBIXML
from Bio import SeqIO

# 读取BLAST文件
result_handle = open("blast_results.xml")
blast_records = NCBIXML.parse(result_handle)
for blast_record in blast_records:
    for alignment in blast_record.alignments:
        print(alignment.title) # 序列名称
        print(alignment.length) # 序列长度

# 写入FASTA文件
blast_records = NCBIXML.parse(open("blast_results.xml"))
records = []
for blast_record in blast_records:
    for alignment in blast_record.alignments:
        title = alignment.title.split()[1] # 获取序列名称
        description = blast_record.query # 获取查询序列名称
        seq = alignment.hsps[0].sbjct # 获取序列信息
        record = SeqIO.SeqRecord(Seq(seq), id=title, description=description)
        records.append(record)
SeqIO.write(records, "blast_results.fasta", "fasta")
总结

Biopython提供了强大的序列输入输出功能,在处理生物序列数据时非常方便高效,可以读取和写入各种格式的生物序列文件。除了上面介绍的几种格式外,还有很多其他的格式,可以在官方文档中了解更多。