разметка позиций мутации в последовательности с HTML в Python - PullRequest
2 голосов
/ 22 марта 2011

Мне было интересно, есть ли в 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 ]

2 голосов
/ 22 марта 2011

Если вы хотите, чтобы ваши мутации были зелеными, и у вас был список мутаций (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 можно комбинировать.

0 голосов
/ 25 апреля 2011

Просто используя пример 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> и </b>):

A C GTA C GT

...