Шаблонные строки в Python - создание шаблонных строк
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Основы «Python»
Комментариев: 0

Шаблонные строки — это инструмент, предоставляемый встроенным модулем стандартной библиотеки Python. Чтобы начать с ним работать, вам нужно импортировать класс Template, так как шаблоны находятся не в основном синтаксисе Python, а в модуле, потому что, они используются не для повседневных задач, а для более конкретных задач. Они имеют довольно ограниченный функционал, но могут быть тонко настроены.

Импорт Template:

from string import Template

Давайте рассмотрим пример работы шаблонных строк:

from string import Template

pattern_string = Template('Лучше поздно, чем $never')
prepared_string = pattern_string.substitute(never='никогда')

print(prepared_string)

Результат:

>>> Лучше поздно, чем никогда

Пояснение:

  • Мы импортировали класс Template из модуля string.
  • Определяем шаблон, а за идентификатор, в котором будет подставлено значение вводим как $never.
  • Добавляем к строке метод sutstitute(), в который передаем аргумент нашего идентификатора и его строку. 

В идентификатор можно передать любой тип данных, при преобразовании он будет приведен к типу строки.

Идентификатор шаблона:

Рассмотрим требования к идентификатору шаблона для построения правильной шаблонной строки:

  • Всегда начинается с символа «$»
  • Содержит буквы и/или цифры и/или символы подчеркивания. Невозможно начать с числа. Не могут использоваться в идентификаторах шаблонов: кириллица и другие символы, отличные от ASCII.
  • Идентификатор считается завершенным, когда встречается первый символ, не соответствующий требованиям предыдущего пункта.
  • Идентификатор может быть заключен в фигурные скобки.

Примечание: если вам нужно использовать символ «$» вне идентификатора, вам нужно экранировать, т.е. поставить другой такой же символ впереди, иначе Python вернет исключение:

Неправильно:

from string import Template

pattern_string = Template('Лучше поздно заработать $money$, чем никогда')
prepared_string = pattern_string.substitute(money='1000000')

print(prepared_string)

Ошибка:

>>> Traceback (most recent call last):

>>> 	...
>>>     raise ValueError('Invalid placeholder in string: line %d, col %d' %
>>> ValueError: Invalid placeholder in string: line 1, col 25

Правильно:

from string import Template

pattern_string = Template('Лучше поздно заработать $money$$, чем никогда')
prepared_string = pattern_string.substitute(money='1000000')

print(prepared_string)

Результат:

>>> Лучше поздно заработать 1000000$, чем никогда

Зачем нам нужна возможность заключать идентификатор в фигурные скобки. Помните: «Идентификатор считается завершенным, когда он находит первый символ, не соответствующий требованиям предыдущего пункта». Этот символ обычно представляет собой пробел. 

Предположим, что нам необходимо автоматизировать создание файлов, содержащих коммерческую информацию о продуктах нашей компании. Имена файлов присваиваются по шаблону, включающему код продукта, название и производственную партию, причем все они разделены символом подчеркивания _. Рассмотрим следующий пример:

from string import Template

filename_temp = Template('$code_$product_$batch.xlsx')
ready_filename = filename_temp.substitute(code='023', product='amazfit_bip_3_pro', batch='bip.023.2022')

print(ready_filename)

Этот код выдаст нам ошибку:

>>> Traceback (most recent call last):

>>> 	...
>>>     return str(mapping[named])
>>> KeyError: 'code_'

Для решения этой ошибки мы и воспользуемся фигурными скобками:

from string import Template

filename_temp = Template('${code}_${product}_$batch.xlsx')
ready_filename = filename_temp.substitute(code='023', product='amazfit_bip_3_pro', batch='bip.023.2022')

print(ready_filename)

Результат:

>>> 023_amazfit_bip_3_pro_bip.023.2022.xlsx

Теперь шаблон работает корректно! Это потому, что фигурные скобки правильно отделяют наши идентификаторы от символа

О методе substitute()

До сих пор мы использовали этот метод в экземпляре для выполнения подстановки строк. Этот метод заменяет идентификаторы в строке шаблона, используя либо аргументы ключевого слова, либо совпадение, содержащее пары идентификатор-значение  - словарь.

from string import Template

template = Template('Hi $name, welcome to $site')
mapping = {'name': 'Vladislav', 'site': 'notehunter.net'}
prepared_string = template.substitute(**mapping)

print(prepared_string)

Примечание: если мы передадим в метод substitute() меньше значений, чем у нас существует идентификаторов, мы получим ошибку: KeyError: '<name>'

Теги записи: Python, Основы Python, Строки,
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)