第一章:biopython
第二节:序列组成
SeqIO同时读取两个文件read1文件和read2文件,利用itertools
from Bio import SeqIO
import itertools
for r1, r2 in itertools.izip(SeqIO.parse(gzip.open('*.R1.fine.fastq.gz'),'fastq'), SeqIO.parse(gzip.open('*.R2.fine.fastq.gz'),'fastq')):
····r1,r2
1,序列的特性
生物信息当中的序列(DNA、RNA、amino acid)与python当中的字符串有两点不同(其余属性大致相同,比如序列长度,可以进行切片等)
第一点不同:序列有 translate() ,即翻译;序列有reverse_complement() ,即反向互补序列(反向互补序列一般对DNA序列而言)
第二点不同:序列存在一定的字母排列规则,即为alphabet;例如,DNA序列为“TAGC”表示四种碱基,而氨基酸序列也可以为“AGCT”表示不同的氨基酸简写,一般在文件中会显示氨基酸的一个字母的简写
2,序列属性alphabet
Bio包当中存在Bio.Alphabet模块,其作用是定义DNA、RNA及amino acid序列
amino acid序列,有 ExtendedIUPACProtein 用法,能够区分该大写字母为哪种氨基酸,例如:“U”表示“Sec”,“B”表示“Asx”,(这两种均为稀有氨基酸)而“X”表示“Xxx”表示为未知氨基酸
DNA序列,有IUPACAmbiguousDNA及ExtendedIUPACDNA用法
RNA序列,有IUPACAmbiguousRNA及IUPACUnmbiguousDNA用法
3,与序列相关的模块使用
>>> from Bio.Seq import Seq
#该模块用于构建序列
>>> from Bio.Alphabet import IUPAC
#该模块用于判断序列类型
>>> my_seq=Seq("AGTACA", IUPAC.unambiguous_dna)
#根据Alphabet()特性将Seq定义为DNA序列
>>> my_prot=Seq("AGTACA", IUPAC.protein)
#定义一个氨基酸序列
>>> my_seq.alphabet
IUPACUnambiguousDNA()
IUPAC.unambiguous_dna表示确定的DNA序列,不允许存在模糊碱基
IUPAC.ambiguous_dna表示允许存在模糊碱基
函数Seq()
(首字母大写)加字符串,再加IUPAC特性,可表示DNA或氨基酸序列
构建序列方法:
Seq(str("AGTACA"), IUPAC.unambiguous_dna)
4,序列与字符串存在一些相同的特性
>>> my_seq=Seq("GATCG", IUPAC.unambiguous_dna)
#定义一段DNA序列
>>> for index, letter in enumerate(my_seq):
>>> ····print "%d\t%s"%(index, letter)
#index为序列编号值为0,letter为Seq
>>> len(my_seq)
#序列长度
>>> my_seq[0]
#序列的第一个碱基,返回一个字符串,方法类似于字符串的切片
>>> my_seq.count("A")
#返回序列当中“A”碱基的个数
>>> my_seq.count("G")
#计算“G”碱基个数
>>> float(my_seq.count('G')+my_seq.count('C'))/len(my_seq)*100
#计算序列的GC含量
但其实在Bio.SeqUtils模块中有一个GC函数,可计算序列GC含量
>>> from Bio.SeqUtils import GC
>>> GC(my_seq)
#返回一个百分数数值并不带百分号
序列的split方法和字符串的切片方式相同
>>> my_seq=Seq("GATC