Форматирование строк в 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% прибыли.
Источники и полезные ссылки:
- Наиболее распространенные варианты использования старого и нового API форматирования строк с практическими примерами
- Formatted String Literals
- Format String Syntax