biopython安装
pip3 install biopython
引入Bio模块
import Bio
from Bio.Seq import Seq
新建序列
seq1 = Seq("ATTCCGTTTGACTGCGTGTTGAAAAACCTGGGGCCCATGCTGCATGGC")
GC含量
from Bio.SeqUtils import GC
GC(seq1)
序列处理
注意:下表是从0开始,区间是左闭右开。
seq1[0:10:1] #获取第1到10个序列,step是1.
反向
seq1.complement()
反向互补
seq1.reverse_complement()
转录DNA成mRNA
mRNA_seq1 = seq1.reverse_complement().transcribe()
转录翻译DNA成蛋白序列
protein_seq1 = seq1.translate() #默认是常用table id 1
biopython的翻译表是基于NCBI.可以根据实际设定table
protein_seq1 = seq1.translate(table=2,to_stop=True) #设置为线粒体模式,遇到终止密码子则停止
protein_seq1 = seq1.translate(to_stop=True) #遇到终止密码子则停止
protein_seq1 = seq1.translate(cds=True) #说明你输入的是完整的cds序列,不含中止密码子,如果出现终止密码子则会抛出异常
翻译表
from Bio.Data import CodonTable
standard_table = CodonTable.unambiguous_dna_by_name["Standard"]
print(standard_table)
MutableSeq对象
Seq对象的序列是只读的。使用MutableSeq可以转换成可变的序列
from Bio.Seq import MutableSeq
mutable_seq = MutableSeq("GCCATTGTAATGGGCCGCTGGCCATTTGCCCGACCATTGTAATGGGCCGCTGAAAGGGTGCCCGAGAAAGGGTGCCCGA")
mutable_seq[5] = "G"
mutable_seq.remove("T")
当编辑完成时,可以用toseq()转变为Seq序列。
new_Seq = mutable_seq.toseq()
UnknownSeq对象 使用UnknownSeq可以节省内存
from Bio.Seq import UnknownSeq
unk1 = UnknownSeq(20) #20个未知序列,默认是用?
unk2 = UnknownSeq(30,character="N") #指定字符为N
第4章 序列注释对象
from Bio.SeqRecord import SeqRecord
第5章 序列输入和输出
读取单条序列
from Bio import SeqIO
single_seq_record = Bio.SeqIO.read("single.fa","fasta")
读取多条序列
from Bio import SeqIO
for seq_record in SeqIO.parse("Sua.5LTR3.fa","fasta"):
print(seq_record.id)
print(repr(seq_record.seq))
print(len(seq_record))
把结果读取到list
records = list(SeqIO.parse("unknown.lib.fa","fasta"))
使用文件句柄
with open("test.fa") as handle:
print(sum(len(r) for r in SeqIO.parse(handle,"fasta")))
打开gzip压缩文件
import gzip
from Bio import SeqIO
with gzip.open("chr.fa.gz","rt") as handle:
print(sum(len(r) for r in SeqIO.Parse(handle,"fasta")))
打开bzip2压缩文件
import bz2
from Bio import SeqIO
with bz2.open("cha.fa.bz2","rt") as handle:
print(sum(len(r) for r in SeqIO.Parse(handle,"fasta")))
写入序列文件
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from Bio import SeqIO
SeqIO.write(proteins,"translations.fasta","fasta")
模块化1:把DNA序列转换为蛋白质序列
修改最后一行的输入文件和输出文件即可运行
#转换DNA序列为protein序列
def dna2protein(in_fasta,out_fasta,table=1):
##定义转换函数
from Bio.SeqRecord import SeqRecord
def make_protein_record(dna_record):
"""return a new SeqRecord with the translate sequence"""
return SeqRecord(seq = dna_record.seq.translate(table=table),id = dna_record.id,description = "translation of protein ")
##读取fasta序列
from Bio import SeqIO
proteins = (make_protein_record(dna_record) for dna_record in SeqIO.parse(in_fasta,"fasta"))
SeqIO.write(proteins,out_fasta,"fasta")
dna2protein("unknown.fa","unknown.protein.fa")