Я знаю, что шаблон может работать следующим образом:
x = Template(" Coordinates; $o1;$o2;$o3;\n")
y = x.substitute(o1 = 23, o2 = 108, o3 = 655)
и y даст мне:
" Coordinates; 23;108;655;\n"
Мне интересно, есть ли способ сделать обратное?что-то вроде моей готовой распаковки:
x = Template(" Coordinates; $o1;$o2;$o3;\n")
y = " Coordinates; 23;108;655;\n"
z = x.unpack(y)
и z возвращает что-то вроде:
["23","108","655"]
есть идеи?я должен вместо этого использовать регулярные выражения?
EDIT: Если использовать регулярные выражения, как бы я запрограммировал следующие 3 строки, чтобы они возвращали первое число и 6 конечных чисел?
a = " 123; Coord ; 19.1335; 3.5010; 1; 3; 8; 4"
b = " 17; Coord ; 15.2940; 13.5010; 3; 1; 8; 8"
c = " 5; Coord ; 19.1345; 0.6200; 1; 1; 7; 8"
Я попробовал это на тех, и, похоже, не смог заставить его работать:
>>> re.match('(\d+); Coord ;(\d+);(\d+);(\d+);(\d+);(\d+);(\d+)',a).groups()
РЕШЕНИЕ: Использование регулярных выражений учебник (спасибо ironchefpython):
>>> import re
>>> text = """
123; Coord ; 19.1335; 3.5010; 1; 3; 8; 4
17; Coord ; 15.2940; 13.5010; 3; 1; 8; 8
5; Coord ; 19.1345; 0.6200; 1; 1; 7; 8
"""
>>> coord = re.compile("\D*(\d+)\D+([\d\.]+)\D+([\d\.]+)\D+(\d+)\D+(\d+)\D+(\d+)\D+(\d+)")
>>> coord.findall(text)
[('123','19.1335','3.5010','1','3','8','4'),('17','15.2940','13.5010','3','1','8','8'),('5','19.1345','0.6200','1','1','7','8')]