python: find repeat masked intervals in fasta files
Aug 10, 2009通常fasta文件用N来表示重复序列(用小写的atgc也很常见),下面的代码就是找出fasta文件中用N标记的区域。
首先导入biopython包,然后用SeqIO.to_dict()函数把fasta文件的记录转换成python字典。
然后用firstN标记是否在连续的N字符中间,如果不在,则firstN == True, 否则False。其他的不言自明啦。
其中用到了python两个很方便的函数:
一是字典的items()函数: for key,value in dict.items(),返回由dict的键值对组成的list;
一是list的enumerate()函数: for index, element in enumerate(list),枚举出list元素的下标和元素本身。
输出的是 chromosome_id Nstart Nend (下标从1开始,包括起点和终点)
以下是代码:
from Bio import SeqIO
fastafile = 'tair8.at.chromosomes.fas.masked'
chrD = SeqIO.to_dict(SeqIO.parse(open(fastafile),'fasta'))
for chrid,sequence in chrD.items():
firstN = True
for i,x in enumerate(sequence.seq.tostring()):
if x == 'N':
if firstN:
start = i+1
firstN = False
elif not firstN:
end = i
firstN = True
print chrid,start,end
可以很容易的修改上述代码,用来寻找小写字母区域:
from Bio import SeqIO
fastafile = 't.fa'
chrD = SeqIO.to_dict(SeqIO.parse(open(fastafile),'fasta'))
for chrid,sequence in chrD.items():
firstLower = True
for i,x in enumerate(sequence.seq.tostring()):
if x.islower():
if firstLower:
start = i+1
firstLower = False
elif not firstLower:
end = i
firstLower = True
print chrid,start,end