Я предполагаю, что вы будете делать многочисленные извлечения информации из строк в будущем. Тогда я советую научиться использовать инструмент регулярных выражений, это будет неизбежно.
Или вам придется изучать и использовать специализированную библиотеку для обработки строк в области геномики.
Простое решение вашей нынешней проблемы с модулем re
:
line = '''080821_HWI-EAS301_0002_30ALBAAXX:1:8:1649:2027 83 chr10
42038185 255 36M = 42037995 -225
GCCAGGTTTAATAAATTATTTATAGAATACTGCATC @?DDEAEFDAD@FBG@CDA?
DBCDEECD@D?CBA>A NM:i:0 MD:Z:36'''
import re
print re.search(':(\d+) ',line).group(1)
Если перед четвертым ':' есть пробелы, то шаблон регулярного выражения будет:
line = '''080821_HWI-EAS301_0002_30AL BAAXX:1:8 :1649:2027 83 chr10
42038185 255 36M = 42037995 -225
GCCAGGTTTAATAAATTATTTATAGAATACTGCATC @?DDEAEFDAD@FBG@CDA?
DBCDEECD@D?CBA>A NM:i:0 MD:Z:36'''
import re
print re.search('(:[^:]+){3}:(\d+)',line).group(2)
(:[^:]+)
соответствует ':', за которым следует столько символов, которые отличаются от ':', которые могут следовать за
{3}
говорит, что это совпадение должно быть выполнено 3 раза
, затем должен встретиться четвертый ':'
, за которым следует искомый номер, соответствующий \d+
; больше нет необходимости указывать, что после номера должен быть пробел, потому что \d+
перестанет совпадать в строке, как только встретится нецифровый символ
Круглые скобки определяют группы. Здесь нужный номер ловится второй группой