Python вставка пробелов в строку



Хорошо, я работаю над маленьким проектом для школы, 6-кадровый переводчик. Я не буду вдаваться в подробности, просто опишу то, что хотел добавить.
Нормальный вывод будет примерно таким:



TTCPTISPALGLAWS_DLGTLGFMSYSANTASGETLVSLYQLGLFEM_VVSYGRTKYYLICP_LFHLSVGFVPSD


Важной частью этой строки являются M и _ (стартовый и стоп-кодоны, биологические вещи). Что я хотел сделать, так это выделить их следующим образом:

TTCPTISPALGLAWS_DLGTLGF 'MSYSANTASGETLVSLYQLGLFEM_' VVSYGRTKYYLICP_LFHLSVGFVPSD


Теперь вот где (для меня) это становится сложным, я получил свой вывод, чтобы выглядеть так (добавление пробела и ' выделите пункты старт и стоп). Но он делает это только один раз, для первого запуска и остановки он находит. Если есть другие М....._ комбинации он не будет выделять их.



Вот мой текущий код, который я пытаюсь выделить несколько раз:



def start_stop(translation):
index_2 = 0
while True:
if 'M' in translation[index_2::1]:
index_1 = translation[index_2::1].find('M')
index_2 = translation[index_1::1].find('_') + index_1
new_translation = translation[:index_1] + " '" +
translation[index_1:index_2 + 1] + "' " +
translation[index_2 + 1:]
else:
break
return new_translation


Я действительно думал, что это сделает это, думаю, нет. Так что теперь я нахожусь в тупике.
Если кто-то из вас готов попытаться помочь, вот случайно сгенерированная строка с более чем одним М....._ set:



'TTCPTISPALGLAWS_DLGTLGFMSYSANTASGETLVSLYQLGLFEM_VVSYGRTKYYLICP_LFHLSVGFVPSDGRRLTLYMPPARRLATKSRFLTPVISSG_DKPRHNPVARSQFLNPLVRPNYSISASKSGLRLVLSYTRLSLGINSLPIERLQYSVPAPAQITP_IPEHGNARNFLPEWPRLLISEPAPSVNVPCSVFVVDPEHPKAHSKPDGIANRLTFRWRLIG_VFFHNAL_VITHGYSRVDILLPVSRALHVHLSKSLLLRSAWFTLRNTRVTGKPQTSKT_FDPKATRVHAIDACAE_QQH_PDSGLRFPAPGSCSEAIRQLMI'


Спасибо всем готовы помочь :)

565   2  

2 ответов:

Регулярные выражения здесь очень удобны:

import re
sequence = "TTCP...."
highlighted = re.sub(r"(M\w*?_)", r" '\1' ", sequence)

# Output:
"TTCPTISPALGLAWS_DLGTLGF 'MSYSANTASGETLVSLYQLGLFEM_' VVSYGRTKYYLICP_LFHLSVGFVPSDGRRLTLY 'MPPARRLATKSRFLTPVISSG_' DKPRHNPVARSQFLNPLVRPNYSISASKSGLRLVLSYTRLSLGINSLPIERLQYSVPAPAQITP_IPEHGNARNFLPEWPRLLISEPAPSVNVPCSVFVVDPEHPKAHSKPDGIANRLTFRWRLIG_VFFHNAL_VITHGYSRVDILLPVSRALHVHLSKSLLLRSAWFTLRNTRVTGKPQTSKT_FDPKATRVHAIDACAE_QQH_PDSGLRFPAPGSCSEAIRQLMI"

Регулярное выражение:
Мы ищем M, за которым следует любое число "символов слова" \w*, затем _, используя ?, чтобы сделать его не жадным (в противном случае он просто сделал бы одну группу от первого M до последнего _).
Замена-это совпадающая группа (\1 указывает на "первую группу", есть только одна), но окруженная пробелами и кавычками.

Вам просто нужен маленький кусочек модуля "slice", вам не нужен никакой внешний модуль:

У Python string есть метод под названием "index", просто используйте его.

string_1='TTCPTISPALGLAWS_DLGTLGFMSYSANTASGETLVSLYQLGLFEM_VVSYGRTKYYLICP_LFHLSVGFVPSD'

before=string_1.index('M')
after=string_1[before:].index('_')
print('{}  {} {}'.format(string_1[:before],string_1[before:before+after+1],string_1[before+after+1:]))

Вывод:

TTCPTISPALGLAWS_DLGTLGF  MSYSANTASGETLVSLYQLGLFEM_ VVSYGRTKYYLICP_LFHLSVGFVPSD

Comments

    Ничего не найдено.