В прошлых темах было рассмотрено, как можно вставлять в строку некоторые значения, предваряя строку символом f:
first_name="Tom" text = f"Hello, {first_name}." print(text) # Hello, Tom. name="Bob" age=23 info = f"Name: {name}\t Age: {age}" print(info) # Name: Bob Age: 23
Но также в Python есть альтернативный способ, который предоставляет метод format(). Этот метод позволяет форматировать строку, вставляя в нее на место плейсхолдеров определенные значения.
Для вставки в строку используются специальные параметры, которые обрамляются фигурными скобками ({}).
В форматируемой строке мы можем определять параметры, в методе format()
передавать для этих параметров значения:
text = "Hello, {first_name}.".format(first_name="Tom") print(text) # Hello, Tom. info = "Name: {name}\t Age: {age}".format(name="Bob", age=23) print(info) # Name: Bob Age: 23
Причем в метод формат аргументы определяются с тем же именем, что и параметры в строке. Так, если параметр называется first_name
, как в первом случае,
то аргумент, которому присваивается значение, также называется first_name
.
Мы также можем последовательно передавать в метод format набор аргументов, а в самой форматируемой строке вставлять эти аргумента, указывая в фигурных скобках их номер (нумерация начинается с нуля):
info = "Name: {0}\t Age: {1}".format("Bob", 23) print(info) # Name: Bob Age: 23
При этом аргументы можно вставлять в строку множество раз:
text = "Hello, {0} {0} {0}.".format("Tom")
Еще один способ передачи форматируемых значений в строку представляет использование подстановок или специальных плейсхолдеров, на место которых вставляются определенные значения. Для форматирования мы можем использовать следующие плейсхолдеры:
s: для вставки строк
d: для вставки целых чисел
f: для вставки дробных чисел. Для этого типа также можно определить через точку количество знаков в дробной части.
%: умножает значение на 100 и добавляет знак процента
e: выводит число в экспоненциальной записи
Общий синтаксис плейсхолдера следующий:
{:плейсхолдер}
В зависимости от плейсхолдера можно добавлять дополнительные параметры. Например, для форматирования чисел float можно использовать следующие параметры
{:[количество_символов][запятая][.число_знаков_в_дробной_части] плейсхолдер}
При вызове метода format в него в качестве аргументов передаются значения, которые вставляются на место плейсхолдеров:
welcome = "Hello {:s}" name = "Tom" formatted_welcome = welcome.format(name) print(formatted_welcome) # Hello Tom
В качестве результата метод format()
возвращает новую отформатированную строку.
Форматирование целых чисел:
source = "{:d} символов" number = 5 target = source.format(number) print(target) # 5 символов
Если форматируемое число больше 999, то мы можем указать в определении плейсхолдера, что мы хотим использовать запятую в качестве разделителя разрядов:
source = "{:,d} символов" print(source.format(5000)) # 5,000 символов
Причем плейсхолдеры можно использовать и в f-строках:
n = 5000 source = f"{n:,d} символов" print(source) # 5,000 символов
Для дробных чисел, то есть таких, которые представляют тип float, перед кодом плейсхолдера после точки можно указать, сколько знаков в дробной части мы хотим вывести:
number = 23.8589578 print("{:.2f}".format(number)) # 23.86 print("{:.3f}".format(number)) # 23.859 print("{:.4f}".format(number)) # 23.8590 print("{:,.2f}".format(10001.23554)) # 10,001.24
Еще один параметр позволяет установить минимальную ширину форматируемого значения в символах:
print("{:10.2f}".format(23.8589578)) # 23.86 print("{:8d}".format(25)) # 25
Аналогичный пример с f-строками:
n1 = 23.8589578 print(f"{n1:10.2f}") # 23.86 n2 = 25 print(f"{n2:8d}") # 25
Для вывода процентов лучше воспользоваться кодом "%":
number = .12345 print("{:%}".format(number)) # 12.345000% print("{:.0%}".format(number)) # 12% print("{:.1%}".format(number)) # 12.3% print(f"{number:%}") # 12.345000% print(f"{number:.0%}") # 12% print(f"{number:.1%}") # 12.3%
Для вывода числа в экспоненциальной записи применяется плейсхолдер "e":
number = 12345.6789 print("{:e}".format(number)) # 1.234568e+04 print("{:.0e}".format(number)) # 1e+04 print("{:.1e}".format(number)) # 1.2e+04 print(f"{number:e}") # 1.234568e+04 print(f"{number:.0e}") # 1e+04 print(f"{number:.1e}") # 1.2e+04
Существует также еще один способ форматирования с помощью следующего синтаксиса:
строка%(параметр1, параметр2,..параметрN)
То есть в начале идет строка, которая содержит те же плейсхолдеры, которые были рассмотрены выше (за исключением плейсхолдера %), после строки ставится знак процента %, а затем список значений, которые вставляются в строку. Фактически знак процента представляют операцию, в результате которой образуется новая строка:
info = "Имя: %s \t Возраст: %d" % ("Tom", 35)Hello World ! print(info) # Имя: Tom Возраст: 35
Рядом с плейсхолдером указывается знак процента и в отличие от функции format здесь не требуются фигурные скобки.
Причем способы форматирования чисел здесь также применяются:
number = 23.8589578 print("%0.2f - %e" % (number, number)) # 23.86 - 2.385896e+01
С помощью специальных символов можно задать длину строки при форматировании:
<N: выравнивает строку по левому краю и дополняет ее пробелами с правой стороны до длины N
>N: выравнивает строку по правому краю и дополняет ее пробелами с левой стороны до длины N
^N: выравнивает строку по центру и дополняет ее пробелами с левой и правой стороны до длины N
.N: задает точную длину строки. Если в ней больше N символов, то она усекается
Например:
str = "Hello World" print(f"{str:>16}!") print(f"{str:<16}!") print(f"{str:^16}!") print(f"{str:.16}!") print(f"{str:.5}!")
Результат:
Hello World! Hello World ! Hello World ! Hello World! Hello!