Строковый формат Python

Строковый формат Python Программирование и разработка

Python отлично поддерживает операции со строками и обработку текста. Язык включает в себя богатые возможности для форматирования и вывода текстов. Мы представляем наиболее важные методы форматирования строк Python.

Какие методы форматирования строк используются в Python?

Строки представляют собой цепочки символов и в Python могут содержать отдельные буквы, слова, предложения или даже целые документы. На практике вам часто нужны методы для форматирования строк. Это не означает визуальную маркировку, такую ​​как жирный шрифт в Word. Так о чем это?

Струны могут состоять из нескольких частей. Во многих случаях вы хотите смешивать статические строковые компоненты и переменные данные. Это требуется для вывода данных и создания документов в веб-разработке.

Давайте представим в качестве примера интернет-магазин. Мы хотели бы рассчитать общую стоимость продуктов в корзине и показать пользователю: «Общая цена составляет […] евро».

price = 69.42
message = "The total price is" + price + "EUR"

К сожалению, мы получаем сообщение об ошибке, потому что цена является числом и не может быть объединена со строкой. Нам нужно сначала преобразовать число в строку, используя функцию str() :

message = "The total price is" + str(price) + "EUR"

Это быстро сбивает с толку. Было бы лучше определить весь текст, включая заполнитель, и заполнить его данными. При преобразовании данных может потребоваться адаптация их форматирования. Методы строкового формата Python удовлетворяют именно этим требованиям.

Как работают методы строкового формата Python?

Python поддерживает несколько методов форматирования строк, каждый из которых имеет свои преимущества и недостатки. Разнообразие выросло исторически, а это означает, что между отдельными методами есть много сходств и некоторые различия. Мы представляем четыре наиболее популярных подхода к форматированию строк Python:

  1. Форматирование строки с оператором по модулю
  2. Форматирование строки с помощью метода str.format()
  3. Форматирование строк с интерполяцией строк
  4. Форматирование строк с помощью шаблонных строк

Модульный оператор

Это старейшее форматирование строк, встроенное в Python, использует оператор Python для знаков процента, который в противном случае используется для математической операции по модулю. Поэтому этот подход также известен как форматирование строки по модулю.

Далее мы используем схему с тремя переменными. Настоящие имена не имеют значения; мы выбрали это, чтобы код был максимально простым для понимания.

Компонент Обозначение
Строковый шаблон с заполнителями шаблон
модульный оператор %
Данные для вставки данные
Полностью отформатированная строка сообщение

Во-первых, мы определяем шаблон как строковую переменную с именем template. В шаблоне мы указываем позицию заполнителя с помощью аббревиатуры %s :

template = "The total price is %s"

Затем мы определяем вставляемое значение как переменную с именем data :

data = 69.51

Чтобы выполнить форматирование строки Python, мы пишем шаблон строки, за которым следует оператор по модулю и, наконец, переменная данных. В то же время мы присваиваем форматированную строку переменной сообщения :

message = template % data

Данные могут быть переменной. Но мы можем так же легко использовать литерал или выражение. Операцию по модулю можно разместить в одной строке. Вот пример со строковым литералом, вставленным вместо заполнителя:

message = "Here comes %s" % "Jack"

Другой пример: мы вычисляем сумму цен за единицу и включаем общую цену в сообщение. Применяется та же схема; мы показываем, что за оператором по модулю может следовать выражение:

prices = (42, 69, 51)
message = "The total price is %s" % sum(prices)

В этот момент вам может быть интересно, почему используется подстановочный знак %s, а не только сам знак процента. На самом деле «s» имеет особое значение: когда данные вставляются, они преобразуются в строку с помощью функции str().

Читайте также:  Как создать элемент с помощью document.createElement - подробное руководство для разработчиков

В Python есть и другие ярлыки форматирования строк, например. B. Специальное форматирование чисел. Это можно проиллюстрировать на примере круга с числом Pi.Для этого мы вставляем число в привычный заполнитель %s. Вывод содержит 15 знаков после запятой:

from math import pi as PI
print("The value of Pi is approximately %s" % PI)

Если вместо этого мы используем аббревиатуру %g в качестве заполнителя, отображаются только пять знаков после запятой:

print("The value of Pi is approximately %g" % PI)

В дополнение к %s и %g существует ряд других опций — см. следующий раздел.

Также можно определить и заполнить несколько заполнителей, используя форматирование строки по модулю в Python. В этом случае оператор по модулю ожидает кортеж с таким количеством значений, сколько имеется заполнителей. Заполнители заполняются значениями:

person = ('John', 42)
message = "My friend %s is %s years old" % person

Как видите, форматирование строки Python с оператором по модулю не особенно читабельно. Будет немного лучше, если мы передадим dict с данными вместо кортежа. В этом случае мы вводим имена записей словаря в скобках после знака процента в качестве заполнителей. Чтение шаблона строки показывает, какие значения ожидать:

person = {'name': 'John', 'age': 42}
message = "My friend %(name)s is %(age)s years old" % person

str.format() method

Метод строкового форматирования Python — это усовершенствование форматирования по модулю, которое изначально было включено в Python 3, а затем перенесено в Python 2.6. Вместо специального оператора используется объектно-ориентированный подход. Это делает str.format() совместимым с другими строковыми методами, такими как функция Python str.split.

Базовая схема метода Python str.format() аналогична форматированию с помощью оператора по модулю и существует в аналогичной форме в.NET и Rust. В качестве заполнителей в строке шаблона используются фигурные скобки, данные передаются в качестве аргументов в вызов функции:

template = "Here comes {}"
data = 'Jack'
message = template.format(data)

Если строка шаблона содержит несколько заполнителей, мы передаем соответствующее количество аргументов:

message = "My friend {} is {} years old".format('John', 42)

При желании мы указываем позицию аргументов, которые нужно включить в качестве индексов. Таким образом, порядок заполнителей можно отделить от аргументов. Имейте в виду, что индексы начинаются с нуля:

message = "My friend {1} is {0} years old".format(69, 'Jim')

Если отдельные значения находятся в структуре данных, мы используем оператор звездочки перед аргументом для распаковки структуры данных. Это работает со списками и кортежами:

person = ('John', 42)
message = "My friend {} is {} years old".format(*person)

С более длинными строками бессмысленные заполнители быстро становятся запутанными. Лучше использовать именованные аргументы :

template = "My friend {name} is {age} years old"
message = template.format(name = 'Jack', age = 51)

Если значений много, список аргументов будет очень длинным и, следовательно, запутанным. Тогда лучше собрать значения в дикт и распаковывать дикт при вызове функции. В отличие от списков и кортежей, мы используем двойную звездочку для распаковки словаря:

# define dict
person = {'name': 'Jim', 'age': 69}
# define string with placeholders
template = "My friend {name} is {age} years old"
# unpack dict in `format()` call
message = template.format(**person)

Что особенного в форматировании строк Python с помощью str.format(), так это разнообразие вариантов форматирования. Они расширяют функциональные возможности форматирования по модулю и особенно эффективны для вывода текста в командной строке и для табличных данных. Далее мы представим механизмы форматирования чисел.

Читайте также:  Команды PowerShell: краткий обзор 40 наиболее важных команд

Python предлагает точный контроль над выводом чисел в виде текста. Это позволяет указать, как должны отображаться знаки чисел. Количество знаков после запятой также может быть определено для десятичных чисел. Это полезно при представлении положительных или отрицательных чисел в табличной форме.

Давайте представим, что мы хотим вывести измерения температуры :

samples = [('A0147D', 27.6), ('X1489M', -4.7), ('P9921U', -10.93)]
for sample in samples:
  print('| {} | {} |'.format(*sample))

Вывод выглядит нарезанным, потому что числа имеют разную длину:

| A0147D | 27.6 |
| X1489M | -4.7 |
| P9921U | -10.93 |

Мы настраиваем код и определяем ряд параметров форматирования :

for sample in samples:
  print('| {} | {: 6.2f} |'.format(*sample))

Теперь вывод подходит:

| A0147D | 27.60 |
| X1489M | -4.70 |
| P9921U | -10.93 |

Давайте подробнее рассмотрим параметры форматирования второго заполнителя. Они следуют за двоеточием и включают четыре компонента:

  1. Пробел: ставит перед положительными числами пробел, чтобы компенсировать пространство, занимаемое знаком минус отрицательных чисел.
  2. Число перед точкой: общее количество букв, доступных для номера.
  3. Число после точки: количество знаков после запятой; заполняет нулями при необходимости
  4. Буква «f» перед закрывающей фигурной скобкой: форматирует число как десятичное.

Существует ряд других параметров форматирования, которые можно использовать для точного управления выводом чисел и строк. В повседневном использовании использование довольно редкое; при необходимости обратитесь к официальной документации по форматированию строк Python.

Интерполяция строк

Интерполяция строк была доступна в качестве дополнительного метода форматирования, начиная с Python 3.6. Подход, также известный как «f-строки», является наиболее удобным и эффективным для многих приложений. Название происходит от общего синтаксиса; f-строки начинаются с буквы «f» непосредственно перед открывающими кавычками.

Фигурные скобки используются в качестве заполнителей. В отличие от методов, представленных до сих пор, заполнители содержат не индекс или имя, а произвольное выражение. При определении f-строки заполнители заполняются сразу:

message = f"40 + 2 equals {40 + 2}"

Выражение также может быть именем переменной:

name = 'Jack'
message = f"Here comes {name}"

Вы можете легко включить несколько выражений:

prices = (42, 69, 51)
currency = 'EUR'
message = f"The total price is {sum(prices)} {currency}"

template strings

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

Читайте также:  Как создать элемент с помощью document.createElement - подробное руководство для разработчиков

Возможности форматирования в строках шаблона ограничены. Вместо каких-либо выражений заполнители могут содержать только имена переменных. Из-за своей простоты шаблонные строки хорошо подходят для интернационализации строк на нескольких языках.

В качестве заполнителя используется знак доллара, за которым следует имя используемой переменной. Таким образом, строки шаблона похожи на синтаксис языков оболочки, таких как bash или zsh. Значение вставляется при вызове метода replace() :

# import `Template` class from `string` module
from string import Template
# instantiate template
template = Template("Hey there, I'm $name")
# perform substitution
message = template.substitute(name = 'Jack')

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

template = Template("Let's buy $amount ${fruit}s")
message = template.substitute(amount = 3, fruit = 'orange')

Какой метод форматирования строки Python следует выбрать?

Отдельные методы имеют специфические характеристики, которые мы суммируем здесь:

Метод Схема Заполнитель Использовать
Модульное форматирование данные шаблона% %, %(ключ) для версий Python < 2.6
ул.формат() шаблон.формат(данные) {}, {индекс}, {ключ} для сложного форматирования
f строка f»{выражение}» {выражение} для больших струн
строка шаблона template.substitute(данные) ${идентификатор} если строки исходят от пользователя
Оцените статью
Блог о программировании
Добавить комментарий