Форматування рядків

Метод 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 символів

Для дрібних чисел, тобто таких, які представляють тип 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

Для виведення відсотків краще скористатися кодом "%":

number = .12345
print("{:%}".format(number)) # 12.345000%
print("{:.0%}".format(number)) # 12%
print("{:.1%}".format(number)) # 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

Форматування без методу format

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

рядок%(параметр1, параметр2, .. параметрN)

Тобто на початку йде рядок, яка містить ті ж плейсхолдери, які були розглянуті вище (за винятком плейсхолдера%), після рядка ставиться знак відсотка%, а потім список значень, які вставляються в рядок. Фактично знак відсотка представляють операцію, в результаті якої утворюється новий рядок:

info = "Ім'я:% s \ t Вік:% d"% ( "Tom", 35)
print(info) # Ім'я: Tom Вік: 35

Поруч з плейсхолдером вказується знак відсотка і на відміну від функції format тут не потрібні фігурні дужки.

Причому способи форматування чисел тут також застосовуються:

number = 23.8589578
print("% 0.2f -% e"% (number, number)) # 23.86 - 2.385896e + 01