Форматирование строк в Python: что знать заранее
Три способа собрать строку в Python — f-строки, метод format и старый процент. Разберём, какой брать по умолчанию и как форматировать числа, даты и выравнивание, чтобы не гуглить каждый раз.

К концу этой статьи вы сможете собрать любую строку в Python: подставить переменные, округлить число до двух знаков, выровнять колонки в таблице и показать дату в нужном формате. Займёт минут пятнадцать. Всё показано на Python 3.8+ — именно с 3.6 появились f-строки, а с 3.8 в них добавили удобный синтаксис отладки, о котором ниже.
Отдельная тема — логирование и локализация чисел (разделители тысяч по локали через модуль locale). Здесь их не трогаем, только базовое форматирование в коде.
Что нужно иметь до начала
- Python 3.8 или новее. Проверьте: в терминале выполните
python --version— должна появиться строка видаPython 3.11.4. - Любой редактор или интерактивная оболочка. Все примеры ниже можно запускать прямо в
pythonбез установки пакетов — форматирование входит в стандартный язык.
Три способа, но по умолчанию — один
В Python исторически накопилось три механизма. Вам достаточно знать f-строки, но два других вы встретите в чужом коде, поэтому стоит их узнавать в лицо.
| Способ | Как выглядит | Когда использовать |
|---|---|---|
| f-строка | f"Привет, {name}" | По умолчанию, Python 3.6+ |
метод .format() | "Привет, {}".format(name) | Когда шаблон отделён от данных |
оператор % | "Привет, %s" % name | Старый код, лучше не писать новый |
Если пишете новый код на актуальном Python — берите f-строки и не задумывайтесь. Остальные два способа полезны только чтобы читать чужое.
Шаг 1. Простая подстановка через f-строку
Поставьте f перед кавычками, а имена переменных пишите в фигурных скобках прямо внутри строки.
name = "Аня"
age = 30
print(f"{name}, вам {age} лет")
Проверка: в терминале появится строка Аня, вам 30 лет. Внутри скобок можно писать не только имена, но и выражения: f"{age + 1}" выведет 31.
Шаг 2. Числа: округление и разделители
После имени переменной ставится двоеточие, а за ним — спецификатор формата. Для чисел это самая частая задача.
price = 1234567.8912
# два знака после запятой
print(f"{price:.2f}") # 1234567.89
# разделитель тысяч и два знака
print(f"{price:,.2f}") # 1,234,567.89
# проценты (значение умножается на 100)
share = 0.1873
print(f"{share:.1%}") # 18.7%
Проверка: числа выводятся округлёнными, без «хвостов» вроде 1234567.8912. Округление здесь — банковское (до ближайшего чётного), но на двух знаках это заметно редко.
:.2f читается так: .2 — сколько знаков после точки, f — тип «число с плавающей точкой». Запятая перед точкой включает разделитель тысяч.
Целые числа с ведущими нулями
order_id = 42
print(f"{order_id:05d}") # 00042
0 — чем заполнять, 5 — до какой ширины, d — целое число. Полезно для номеров заказов и файлов.
Шаг 3. Выравнивание и колонки
Чтобы столбцы в выводе не «плавали», задайте ширину и сторону выравнивания: < влево, > вправо, ^ по центру.
items = [("Хлеб", 45), ("Молоко", 89), ("Сыр", 560)]
for name, price in items:
# имя влево на 10 символов, цена вправо на 6
print(f"{name:<10}{price:>6} руб.")
Проверка: цены выстроятся в ровную колонку по правому краю, названия — по левому. Такой вывод удобно читать в терминале без сторонних библиотек.
Шаг 4. Даты
Объекты datetime форматируются тем же двоеточием, а после него — коды из strftime.
from datetime import datetime
now = datetime(2024, 3, 8, 14, 30)
print(f"{now:%d.%m.%Y}") # 08.03.2024
print(f"{now:%H:%M}") # 14:30
print(f"{now:%d.%m.%Y %H:%M}") # 08.03.2024 14:30
Проверка: дата выводится в привычном российском виде. Коды %d, %m, %Y, %H, %M — день, месяц, год, часы, минуты. Названия месяцев словами (%B) без настройки локали выйдут на английском.
Шаг 5. Отладочный вывод (Python 3.8+)
Знак = внутри f-строки печатает и имя переменной, и её значение — экономит время при отладке.
total = 199
print(f"{total=}") # total=199
print(f"{total * 2 = }") # total * 2 = 398
Проверка: вместо голого числа вы видите, какая переменная его дала. Это появилось именно в 3.8 — на более старом Python синтаксис вызовет ошибку.
Если не получилось
SyntaxError: f-string: ...или строка выводится с фигурными скобками как есть. Забыли буквуfперед кавычками. Строка"{name}"безf— это просто текст.ValueError: Unknown format code 'f' for object of type 'str'. Применили числовой формат:.2fк строке. Сначала приведите значение к числу:float(value).SyntaxErrorна конструкции{total=}. У вас Python старше 3.8. Проверьте версию черезpython --versionили напишите вывод вручную:f"total={total}".- Внутри f-строки нужны кавычки того же типа, что и снаружи. До Python 3.12 нельзя было вкладывать одинаковые кавычки, поэтому
f"{d['key']}"с двойными снаружи и одинарными внутри работает, а одинаковые дадут ошибку. В 3.12 ограничение сняли. - Нужна буквальная фигурная скобка в тексте. Удвойте её:
f"{{не переменная}}"выведет{не переменная}.
Что дальше
Освоив базу, посмотрите на два продолжения. Первое — полная спецификация мини-языка форматирования в официальной документации (раздел Format Specification Mini-Language): там перечислены все спецификаторы, включая знак числа и научную нотацию. Второе — метод str.format_map() и шаблоны, когда данные приходят словарём. Для многострочных отчётов присмотритесь к сторонним библиотекам вывода таблиц, но начинать стоит с выравнивания через f-строки — его хватает в большинстве случаев.
Субтитры и таймкоды: Расшифровка речи и субтитры по правилам читаемости: 42 знака в строке, две строки, минимум секунда на реплику.
Спросить за 40 ₽Источники: Python docs — Format Specification Mini-Language, PEP 498 — Literal String Interpolation (f-strings)
Частые вопросы
У меня Python 3.6, часть примеров не работает. Что делать?
f-строка или .format() — что быстрее?
Почему число округлилось не так, как я ожидал?
Как вставить фигурную скобку в текст, чтобы её не приняли за переменную?
Можно ли форматировать значения, которые приходят из словаря или переменной с именем формата?
Названия месяцев выводятся на английском, как получить русские?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.