Форматирование строк в Python

Форматирование строк в Python

Karpov.Courses

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

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

Например:

>>> firstname = 'Всеволод'
>>> lastname = 'Карпов'
>>> print("Привет, {}, меня зовут {} {}.".format('anonymous', firstname, lastname))

Привет, anonymous, меня зовут Всеволод Карпов.

Фигурные скобки обозначают позиции в строке, куда будут подставляться значения переменных, указанных в скобках в методе .format(). Значения подставляются последовательно в том порядке, в котором указаны. 

Можно поменять аргументы в методе .format() местами, и вывод изменится:

>>> firstname = 'Всеволод'
>>> lastname = 'Карпов'
>>> print("Привет, {}, меня зовут {} {}.".format(firstname, 'anonymous', lastname))

Привет, Всеволод, меня зовут anonymous Карпов.

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

>>> firstname = 'Всеволод'
>>> lastname = 'Карпов'
>>> print("Привет, {0}, меня зовут {1} {2}.".format('anonymous', firstname, lastname))

Привет, anonymous, меня зовут Всеволод Карпов.

И тогда для изменения порядка вывода достаточно просто поменять местами индексы в фигурных скобках:

>>> firstname = 'Всеволод'
>>> lastname = 'Карпов'
>>> print("Привет, {2}, меня зовут {1} {0}.".format('anonymous', firstname, lastname))

Привет, Карпов, меня зовут Всеволод anonymous.

Также можно использовать именованные аргументы:

>>> print("Привет, {greet}, меня зовут {firstname} {lastname}.".format(greet='anonymous', firstname='Всеволод', lastname='Карпов'))

Привет, anonymous, меня зовут Всеволод Карпов.

В версии Python 3.6 были представлены f-строки — более изысканный способ форматирования, который работает аналогично методу .format(), но упрощает читабельность строки. Сравните с предыдущими примерами:

>>> firstname = 'Всеволод'
>>> lastname = 'Карпов'
>>> print(f"Привет, {'anonymous'}, меня зовут {firstname} {lastname}.")

Привет, anonymous, меня зовут Всеволод Карпов.

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

Форматирование строк удобно применять для преобразования и вывода численного результата. Например, с дробными числами можно сделать следующее:

>>> import math
>>> print(f"У числа pi можно оставить два знака после запятой: {math.pi:.2f}")
>>> print(f"А можно четыре: {math.pi:.4f}")

У числа pi можно оставить два знака после запятой: 3.14

А можно четыре: 3.1415

Если после знака':' указать целое число, оно будет определять минимальную ширину поля символах. Это может быть полезно, если нужно задать определённую ширину поля или выровнять столбцы по ширине. Например, слева от ‘==>’ ширина столбца составляет 10, а справа 15 символов:

>>> table = {'Anatoliy': 9658945612, 'Vsevolod': 9648512312, 'Valeriy': 9137777678}
>>> for name, phone in table.items():
... print(f'{name:10} ==> {phone:15}')

Anatoliy ==> 9658945612

Vsevolod ==> 9648512312

Valeriy  ==> 9137777678

Такой способ форматирования можно применять и для строк, задавая фиксированную длину строки:

>>> s = '55896-nDSDF'
>>> print(f"Хочу оставить только первые 5 символов: {s:.5}.")
>>> print(f"Оставляем 5 символов, но ширину поля делаем равной 15 символам, остальное заполняется пробелами: {s:15.5}. Здесь продолжение строки.")

Хочу оставить только первые 5 символов: 55896.

Оставляем 5 символов, но ширину поля делаем равной 15 символам, остальное заполняется пробелами: 55896 . Здесь продолжение строки.

Иногда нужно показать некоторую динамику показателей: например, прирост пользователей или снижение прибыли. Это тоже можно сделать с помощью форматирования строк. Например:

>>> increase = 100500
>>> decrease = -15
>>> print(f"Судя по отчету, в этом квартале мы увидели {increase:+d} новых пользователей и {decrease}% прибыли.")

Судя по отчету, в этом квартале мы увидели +100500 новых пользователей и -15% прибыли.

Источники и полезные ссылки:

  1. Наиболее распространенные варианты использования старого и нового API форматирования строк с практическими примерами
  2. Formatted String Literals
  3. Format String Syntax


Report Page