Python: рецепты форматирования строк
Часто, когда возникает необходимость в форматировании строк, я забываю некоторые нюансы. В статье ниже рассмотрены всевозможные методы применения Python str.format() и его устаревшего аналога %.
Форматирование чисел
В следующей таблице показаны различные способы форматирования чисел с использованием функции str.format() в python, с примерами как для форматирования дробных, так и для целых чисел.
Для запуска примеров используйте print("FORMAT".format(NUMBER)) Таким образом, чтобы получить результат первого примера, вы должны запустить: print("{:. 2f}".format(3.1415926))
Число | Формат | Результат | Примечание |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 2 знака после запятой |
3.1415926 | {:+.2f} | +3.14 | 2 знака после запятой со знаком |
-1 | {:+.2f} | -1.00 | 2 знака после запятой со знаком |
2.71828 | {:.0f} | 3 | Без знаков после запятой |
5 | {:0>2d} | 05 | Заполнение нулями слева (2 знака) |
5 | {:x<4d} | 5xxx | Заполнение нулями справа (4 знака) |
10 | {:x<4d} | 10xx | Заполнение нулями справа (4 знака) |
1000000 | {:,} | 1,000,000 | Форматирование числа с разделителем запятой |
0.25 | {:.2%} | 25.00% | Форматирование процентов |
1000000000 | {:.2e} | 1.00e+09 | Обозначение экспоненты |
13 | {:10d} | 13 | Выровненный по правому краю (по умолчанию, ширина 10, пустое место заполняется пробельнами символами) |
13 | {:<10d} | 13 | Выровненный слева (ширина 10) |
13 | {:^10d} | 13 | Выровненный по центру (ширина 10) |
Основы string.format()
Вот пара примеров базовой подстановки строк, вырожение {} является заполнителем для замещаемых переменных. Если формат не указан, он будет вставляться и форматироваться в виде строки.
s1 = "so much depends upon {}".format("a red wheel barrow") s2 = "glazed with {} water beside the {} chickens".format("rain", "white")
Вы также можете использовать числовое положение переменных и изменять их в строках, это дает некоторую гибкость при форматировании, если вы допустили ошибку в том порядке, который вы можете легко исправить, не перетасовывая все переменные.
s1 = " {0} is better than {1} ".format("emacs", "vim") s2 = " {1} is better than {0} ".format("emacs", "vim")
Старый метод ворматирования строк черех %
До python 2.6 способ форматирования строк, как правило, был немного проще, хотя и ограничен количеством аргументов, которые он может получить. Эти методы по-прежнему работают с Python 3.3, но есть скрытые угрозы, которые полностью не одобряют их. [РЕР-3101]
Форматирование числа с плавающей запятой:
pi = 3.14159 print(" pi = %1.2f " % pi)
Множественные замещения
s1 = "cats" s2 = "dogs" s3 = " %s and %s living together" % (s1, s2)
Недостаточное количество аргументов аргументы
Используя метод более старого формата, я бы часто получал ошибку «TypeError: not enough arguments for format string», потому что я неправильно определил свою замену, сделайте что-то вроде следующего.
set = " (%s, %s, %s, %s, %s, %s, %s, %s) " % (a,b,c,d,e,f,g,h,i)
Новый форматировщик строк python вы можете использовать пронумерованные параметры, поэтому вам не нужно подсчитывать, сколько у вас есть, по крайней мере, на половине его.
set = " ({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}) ".format(a,b,c,d,e,f,g)
Больше примеров форматирования с функцией .format()
Функция format() предлагает множество дополнительных возможностей и возможностей, вот несколько полезных советов и трюков с использованием .format()
Именованные арргументы
Вы можете использовать новый строковый формат в качестве механизма шаблонов и использовать именованные аргументы, вместо того чтобы требовать строгий порядок.
madlib = " I {verb} the {object} off the {place} ".format(verb="took", object="cheese", place="table") ~~ I took the cheese off the table
Повторное использование одной переменной несколько раз
Используя %, требуется строгий порядок переменных, метод .format() позволяет поместить их в любом порядке, как мы видели выше, и также позволяет повторно их использовать.
str = "Oh {0}, {0}! wherefore art thou {0}?".format("Romeo") ~~ Oh Romeo, Romeo! wherefore art thou Romeo?
Преобразование значений в разные форматы
Вы можете использовать следующие буквы для преобразования числа в свои форматы, decimal, hex, octal, binary
print("{0:d} - {0:x} - {0:o} - {0:b} ".format(21)) ~~ 21 - 15 - 25 - 10101
Используем format как функцию
Вы можете использовать .format как функцию, которая позволяет отделять текст и форматирование от кода. Например, в начале вашей программы вы можете включить все ваши форматы, а затем использовать позже. Это также может быть хорошим способом справиться с интернационализацией, которая требует не только разного текста, но часто требует разных форматов для чисел.
## defining formats email_f = "Your email address was {email}".format ## use elsewhere print(email_f(email="bob@example.com"))
Экранирование фигурных скобок
Если вы хотите использовать фигурные скобки при использовании str.fromat(), просто продублируйте их.
print(" The {} set is often represented as {{0}}".format("empty")) ~~ The empty set is often represented as {0}