Строковое форматирование: синтаксис и примеры использования format

Раздел: Основы Python -> Форматирование строк

Основы метода format

Метод format в Python предоставляет гибкий способ вставки значений в строковые шаблоны. Вместо конкатенации строк используется подстановка через фигурные скобки {}. Такой подход делает код читаемее и позволяет управлять форматом вывода.

Как применить метод format для подстановки значений?

Основной способ - использовать фигурные скобки {} в строке и передать аргументы методу format. Существует два подхода: позиционные и именованные аргументы.

template = "Привет, {}! Тебе {} лет."
result = template.format("Анна", 25)
print(result)

F строка python (f-строка в python)

Привет, Анна! Тебе 25 лет.

вывод данных в строку python (вывод данных в строку в python)

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

template = "Имя: {name}, возраст: {age}"
result = template.format(name="Борис", age=30)
print(result)

Python format method (метод format для строк python)

Имя: Борис, возраст: 30

Python текст в несколько строк (создание многострочных строк в python)

Ошибки: если количество аргументов не совпадает с числом фигурных скобок, возникает IndexError. При использовании именованных аргументов нужно точно указывать ключи, иначе KeyError.

Как отформатировать числа с заданным количеством знаков после запятой?

Для этого применяются спецификаторы формата после двоеточия внутри фигурных скобок.

value = 3.14159265
template = "Число π примерно равно {:.2f}"
print(template.format(value))

Python f name (f-строка с именем в python)

Число π примерно равно 3.14

как добавить пробел в python (добавление пробела в строку python)

Ошибки: неверный код формата (например, f для целого числа) вызывает ValueError. Нужно убедиться, что тип значения соответствует спецификатору.

Как выровнять текст по левому, правому краю или центру?

Используйте символы <, >, ^ с указанием ширины поля.

left = "{:<10}".format("лево")
right = "{:>10}".format("право")
center = "{:^10}".format("центр")
print(left, right, center, sep="\n")

Python format named (форматирование с именованными аргументами в python)

лево      
     право
  центр   

Если ширина меньше длины строки, строка не обрезается; выравнивание игнорируется. Для принудительного обрезания нужно указывать точность .

Как отобразить проценты с помощью format?

Спецификатор % автоматически умножает число на 100 и добавляет знак процента.

p = 0.85
template = "Успех: {:.1%}"
print(template.format(p))
Успех: 85.0%

Ошибки: передача целого числа вместо float приведёт к TypeError, так как % ожидает число с плавающей запятой.

Как получить доступ к элементам словаря или списка внутри метода format?

Можно передать словарь и использовать индексы или ключи в фигурных скобках.

data = {"name": "Иван", "age": 35}
template = "Имя: {0[name]}, возраст: {0[age]}"
print(template.format(data))
Имя: Иван, возраст: 35

Также работает со список по индексу.

Ошибки: неверный ключ или индекс вызывает KeyError или IndexError. Необходимо указывать индекс в квадратных скобках без кавычек.

Как отобразить число в двоичной, восьмеричной или шестнадцатеричной системе?

Используются спецификаторы b, o, x.

n = 255
template = "Двоичное: {:b}, восьмеричное: {:o}, шестнадцатеричное: {:x}"
print(template.format(n, n, n))
Двоичное: 11111111, восьмеричное: 377, шестнадцатеричное: ff

Ошибки: передача строки вместо числа вызывает ValueError. Спецификаторы регистрозависимы: x - строчные, X - прописные.

Как вставить знак плюс для положительных чисел и разделители тысяч?

Спецификатор + принудительно выводит знак, а запятая (,) или символ _ добавляют разделители.

plus = "{:+,.2f}".format(1234567.89)
underscore = "{:_.0f}".format(1234567)
print(plus)
print(underscore)
+1,234,567.89
1_234_567

Ошибки: разделитель _ работает только в Python 3.6+ и только для определённых спецификаторов. Необходимо проверять версию интерпретатора.

Как форматировать дату и время с помощью метода format?

Объект datetime имеет собственную реализацию __format__, поэтому можно использовать директивы.

from datetime import datetime
now = datetime.now()
template = "Сегодня: {:%Y-%m-%d %H:%M:%S}"
print(template.format(now))
Сегодня: 2025-03-29 12:30:45

Ошибки: неверная директива (например, %x вместо %X) вызывает ValueError. Формат зависит от локали системы.

Расширенные примеры использования метода format

Вложение спецификаторов и динамическая ширина поля

Ширина поля может быть передана как аргумент format, что позволяет менять выравнивание в зависимости от данных.

Пример
width = 10
text = "Привет"
result = "{0:>{1}}".format(text, width)
print(result)
    Привет

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

Пример
fill_char = '*'
align = '^'
width = 15
result = "{0:{1}{2}{3}}".format("Центр", fill_char, align, width)
print(result)
*****Центр*****

Использование преобразований !s, !r, !a

Эти преобразования вызывают str(), repr() или ascii() для значения.

Пример
v = "строка\n"
print("str: {!s}".format(v))
print("repr: {!r}".format(v))
print("ascii: {!a}".format(v))
str: строка\n
repr: 'строка\n'
ascii: '\u0441\u0442\u0440\u043e\u043a\u0430\n'

Передача словаря через ** и доступ к вложенным элементам

Метод format умеет разворачивать словарь с помощью **, а также получать значения по ключам в формате {key} или {0[key]}.

Пример
person = {"name": "Мария", "address": {"city": "Москва", "street": "Тверская"}}
template = "Имя: {name}, город: {address[city]}"
print(template.format(**person))
Имя: Мария, город: Москва

При этом для вложенного словаря используется цепочка индексов.

Спецификатор формата для объектов с собственным методом __format__

Пользовательский класс может определять поведение при форматировании.

Пример
class Money:
    def __init__(self, amount):
        self.amount = amount
    def __format__(self, spec):
        if spec == '':
            return f"{self.amount:.2f} руб."
        elif spec == 'usd':
            return f"${self.amount:.2f}"
        else:
            return str(self.amount)

m = Money(123.456)
print("{:}".format(m))
print("{:usd}".format(m))
123.46 руб.
$123.46

Форматирование с учётом локали (locale)

Модуль locale позволяет подставить локальные разделители тысяч и десятичные точки.

Пример
import locale
locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
value = 1234567.89
print(locale.format_string("%.2f", value, grouping=True))
1 234 567,89

Обратите внимание: для работы locale требуется установленная локаль в системе.

Использование .format_map() для безопасного форматирования с отображением

Метод format_map принимает словарь и не вызывает ошибок при отсутствии ключа, если используется пользовательская реализация __missing__.

Пример
from collections import defaultdict
safe_dict = defaultdict(lambda: "[неизвестное]")
safe_dict.update({"name": "Ольга"})
template = "Имя: {name}, возраст: {age}"
print(template.format_map(safe_dict))
Имя: Ольга, возраст: [неизвестное]

Такой подход удобен для шаблонов с необязательными переменными.

Группировка разрядов с символом подчёркивания в разных системах счисления

Пример
value = 123456789
print("Dec: {:,_d}".format(value))
print("Hex: {:,_x}".format(value))
print("Bin: {:,_b}".format(value))
Dec: 123,456,789
Hex: 75b,cd1,5
Bin: 111,0101,1011,1100,1101,0001,0101

Комбинация выравнивания, заполнения и числового формата

Пример
print("{:*>+10.2f}".format(3.14))
print("{:*<+10.2f}".format(-3.14))
*****+3.14
-3.14*****

Метод format для строк Python - comments

En
Python format method (python)