Как написать "между" и "до", чтобы извлечь целые числа из текстового файла в Python?
У меня много строк, как показано ниже.
_:9:_:SER _ 9 SER S 3 0.000 66.878
_:11:_:LEU _ 11 LEU E 8 0.000 67.168
_:108:_:ARG _ 108 ARG 1 0.000 62.398
Каждый элемент разделен пробелом. Потому что разные строки имеют разные номера (например, 9
, 11
, 108
), последующие значения не выровнены в одинаковых позициях столбца. В 3-й строке есть 3 пробела между ARG
а также 1
потому что эта строка не имеет этой информации, поэтому для ее заполнения используется пробел.
Мне нужно извлечь две информации
1) 9
, 11
, 108
значения в 1-й, 2-й и 3-й строках соответственно
2) 3
, 8
, 1
значения (до 0.000
) на 1-й, 2-й и 3-й строках соответственно
Я хочу использовать Python для написания обобщенного скрипта для извлечения этой информации, вместо длинного if-then loop
рассматривать однозначные, двузначные и трехзначные случаи по отдельности.
Моя идея примерно такая:
1) извлечь целочисленные значения между первым и вторым :
2) извлекать целочисленные значения после 5-го пробела, пока после этого значения не будет обнаружен другой пробел.
2 ответа
Если вы можете получить каждую строку в виде строки, вы можете сделать это:
your_line = "_:108:_:ARG _ 108 ARG 1 0.000 62.398"
splitted = your_line.split()
# splitted = ['_:108:_:ARG', '_', '108', 'ARG', '1', '0.000', '62.398']
По сути, он создает список строк из исходного списка, разделенных символом, который вы вводите. Если вы не дадите split()
аргумент, то он просто разбивает строку на любой пробел.
Теперь вы можете легко извлечь нужную информацию:
info1 = splitted[2]
info2 = splitted[4]
Если вы извлекаете только числовые поля, вы можете использовать регулярное выражение \d+(?:\.\d+)?
, который читает цифры, затем, возможно, точку и больше цифр.
Тогда вы можете использовать re.findall
захватить числовые поля в виде списка, а затем работать с ними.
>>> fields = re.findall(r'\d+(?:\.\d*)?', lines[0])
>>> fields
['9', '9', '3', '0.000', '66.878']
>>> (fields[0], fields[2])
('9', '3')