Форматирование текста: f-строки, метод format и классический %

Раздел: Работа со строками -> f-строки, format()

Форматирование строк в Python: выбор подходящего метода

Наиболее эффективный и современный способ форматирования строк в Python 3.6+ - это f-строки (f-strings). Синтаксис компактный и читаемый: переменные и выражения заключаются в фигурные скобки прямо внутри строки, перед которой ставится префикс f. Пример:

name = 'Анна'
age = 30
print(f'Меня зовут {name}, мне {age} лет.')

формат текста python (форматирование строк в python)

Меня зовут Анна, мне 30 лет.

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

import math
print(f'Число Пи: {math.pi:.2f}')
Число Пи: 3.14

f-строки выполняются во время выполнения, но компилируются в байт-код, что делает их быстрыми и безопасными. Они поддерживают многострочные строки с тройными кавычками и экранирование фигурных скобок двойными скобками.

Как вставить переменные в строку с помощью метода format()?

До появления f-строк широко использовался метод str.format(). Он принимает позиционные или именованные аргументы, которые подставляются на места фигурных скобок с индексами или именами.

print('Меня зовут {}, мне {} лет.'.format('Анна', 30))
Меня зовут Анна, мне 30 лет.
print('Меня зовут {name}, мне {age} лет.'.format(name='Анна', age=30))
Меня зовут Анна, мне 30 лет.

Метод format() позволяет задавать выравнивание, ширину, точность для чисел, преобразования типов (!s, !r, !a).

Распространённая ошибка - неправильное количество или порядок аргументов. Если в строке три фигурные скобки, а аргументов только два, возникнет IndexError. Решение - использовать именованные аргументы и явные индексы.

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

Оператор % (модуль строки) - самый старый способ, заимствованный из C. Строка содержит спецификаторы формата (например, %s, %d, %f), после оператора % указывается кортеж или словарь значений.

print('Меня зовут %s, мне %d лет.' % ('Анна', 30))
Меня зовут Анна, мне 30 лет.

Для нескольких значений требуется кортеж, для одного можно без скобок. Спецификаторы поддерживают ширину и точность: %10s, %.2f.

Основная проблема - сложность чтения при большом количестве аргументов и отсутствие прямой поддержки именованных параметров (только через словарь %(key)s). Метод устарел и не рекомендуется для нового кода.

Типичные ошибки при форматировании строк

  • Забытый префикс f: строка с фигурными скобками без f не вызовет ошибки, но переменные не подставятся - останутся фигурные скобки.
  • Ошибка синтаксиса в выражении внутри f-строки: если внутри фигурных скобок написать невалидное выражение (например, {name = } в старых версиях Python), возникает SyntaxError.
  • Использование несовместимых типов: передача числа в %s допустимо, но в %d вызовет TypeError, если число не целое.
  • Экранирование фигурных скобок: чтобы вывести фигурные скобки, нужно использовать {{ и }} для f-строк и format().

Расширенные примеры форматирования строк

Вложенные f-строки и динамические спецификаторы

Пример
width = 10
precision = 3
value = 123.456789
print(f'{value:{width}.{precision}f}')
   123.457

Форматирование даты и времени

Пример
from datetime import datetime
now = datetime.now()
print(f'Сегодня {now:%d.%m.%Y}, время {now:%H:%M}')
Сегодня 14.03.2025, время 10:30

Использование спецификаторов для разных систем счисления

Пример
n = 255
print(f'Десятичное: {n}, двоичное: {n:#b}, шестнадцатеричное: {n:#x}')
Десятичное: 255, двоичное: 0b11111111, шестнадцатеричное: 0xff

Выравнивание и заполнение

Пример
text = 'Привет'
print(f'{text:>20}')
print(f'{text:<20}')
print(f'{text:^20}')
print(f'{text:_>20}')
               Привет
Привет              
       Привет       
______________Привет

Метод format с преобразованием в repr

Пример
print('{!r} {!s}'.format('строка', 'строка'))
'строка' строка

Работа со словарями через format

Пример
data = {'name': 'Иван', 'age': 25}
print('Имя: {name}, Возраст: {age}'.format(**data))
Имя: Иван, Возраст: 25

Форматирование чисел с разделителями разрядов

Пример
big_number = 1234567
print(f'{big_number:,}')   # для целых
print(f'{big_number:_.2f}') # для float с подчёркиванием
1,234,567
1_234_567.00

Использование тройных кавычек с f-строкой

Пример
name = 'Мария'
text = f'''
Привет, {name}!
Это многострочное сообщение.
'''
print(text)
Привет, Мария!
Это многострочное сообщение.

Комбинирование f-строки и метода format()

Хотя обычно используют что-то одно, можно встретить такой код (не рекомендуется, но возможно):

Пример
template = f'Привет, {{name}}'
print(template.format(name='Лена'))
Привет, Лена

Форматирование процентов

Пример
share = 0.2534
print(f'Доля: {share:.1%}')
Доля: 25.3%

Динамическое форматирование с помощью словаря спецификаторов

Пример
format_spec = {'name': '>10', 'age': '<5'}
person = {'name': 'Анна', 'age': 30}
print('{name:{fmt[name]}} {age:{fmt[age]}}'.format(**person, fmt=format_spec))
      Анна 30   

форматирование строк в Python - comments

En
формат текста python (python)