用python中的html标记序列中的变异位置

时间:2011-03-22 11:03:51

标签: python bioinformatics biopython

我想知道python或biopython中是否有任何方法可以在html中标记序列。

我想根据该位置是否为已知的snp / indel等来标记序列上的位置(即颜色基础不同)

在数组中有一个突变位置列表(从数据库中读取),例如

mutation_position = [10,20,30,40]

我可以使用以下内容更改受影响基地的案例: seq = seq [0:b] + mutation_positions [b] .lower()+ seq [(b + 1):len(seq)]

但是可以添加一些HTML代码,例如为每个突变位置添加标签pos。 (当html标记添加到序列中时,序列的长度会发生变化,因此在循环的每次迭代期间,变异位置与新标记的序列不匹配!)

我希望这是有道理的!

感谢。

2 个答案:

答案 0 :(得分:2)

如果你想让你的突变变绿并且你有一个突变列表(0索引):

>>> seq = "ACGTACGT"
>>> muts = [0,1,5]
>>> mark_up = "<span style='color:green;'>%s</span>"

# use list comprehension to add mark up to muts
>>> marked_up_seq = [ mark_up % seq[x] if x in muts else seq[x] for x in range(0,len(seq)) ]

# rejoin marked up list
>>> "".join(marked_up_seq)
"<span style='color:green;'>A</span><span style='color:green;'>C</span>GTA<span style='color:green;'>C</span>GT"
>>> 

为清晰起见,数字为

>>> seq = "0123456789"
>>> muts = [1,3,4,9]
>>> marked_up_seq = [ mark_up % seq[x] if x in muts else seq[x] for x in range(0,len(seq)) ]
>>> "".join(marked_up_seq)
"0<span style='color:green;'>1</span>2<span style='color:green;'>3</span><span style='color:green;'>4</span>5678<span style='color:green;'>9</span>"

这不是最优雅的解决方案,请注意3和4左右的标签可以合并。

答案 1 :(得分:0)

只是使用DTing的示例(和HTML),也许这有点清洁:

seq = "ACGTACGT"
muts = [0,1,5]
marked_up = ""

for pos, nuc in enumerate(seq):
    if pos in muts:
        marked_up = marked_up + "<span class=\"mutated\">" + nuc + "</span>"
    else:
        marked_up = marked_up + nuc

print marked_up

然后你只需要为某些CSS添加样式,如:

span#mutated
{
    color:red;
}

这给出了以下输出:

<span class="mutated">A</span><span class="mutated">C</span>GTA<span class="mutated">C</span>GT

看起来像这样(如果你换了<b&gt;和</b&gt;)的范围:

A C GTA C GT