azalea says

python: find repeat masked intervals in fasta files

通常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

输入文件

bioinformatics fasta programming python · Tweet Edit