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'
Спасибо всем готовы помочь :)
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