Примеры форматирования строк с помощью метода format() в Python
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Основы «Python»
Комментариев: 0

В этом уроке по основам Python мы рассмотри форматирование строк с помощью метода format().

В языке Python есть 4 способа форматирования строк:

С приходом Python 3 появился новый метод форматирования строк - format().

Он более удобен и гибок, чем строковый оператор форматирования

Конечно у данного способа есть и минусы: работает он медленнее, что, в некоторых ситуациях, бывает критично.

Метод format() принимает любое количество аргументов. Делятся они на следующие типы:

  • Позиционные аргументы - список параметров, к которым можно получить доступ через индекс параметра в фигурных скобках {index}.
  • Аргументы - ключевые слова - список параметров ключ=значение, доступ к которым осуществляется с помощью ключевого параметра в фигурных скобках {ключ}.

Формат считывает тип переданных аргументов и форматирует строку в соответствии с кодами формата в строке.

Давайте рассмотрим примеры использования format():

Позиционирование с заданными индексами:

string = 'Hello, {0}, which city are you heading to? - Im going to {1}!'.format('Vladislav', 'Moscow')

print(string)

Результат:

>>> Hello, Vladislav, which city are you heading to? - Im going to Moscow!

Мы воспользовались явными индексами. Но что будет, если мы не будем указывать индексы?

string = 'Hello, {}, which city are you heading to? - Im going to {}!'.format('Vladislav', 'Moscow')

print(string)

Результат:

>>> Hello, Vladislav, which city are you heading to? - Im going to Moscow!

Если не использовать индексы явно, то Python сделает это сам, вставляя аргументы по порядку их перечисления:

Рассмотрим пример именованных аргументов:

 string = 'I would like to invite {name} on a date to the restaurant "{restaurant}".'.format(name='Natalia', restaurant='By the Sea')

print(string)

Результат:

>>> I would like to invite Natalia on a date to the restaurant "By the Sea".

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

string = 'Hello, {}. You are at a depth of {meters:d} meters.'.format('Alexander', meters=800)

print(string)

Результат:

>>> Hello, Alexander. You are at a depth of 800 meters.

Примечание: если передать методу меньше аргументов, чем указано, интерпретатор вернёт исключение: IndexError: Replacement index 1 out of range for positional args tuple

Таблица форматирования чисел:

ТипЗначение
dДесятичное число
cСимвол Unicode по номеру
bДвоичный формат
oВосьмеричный формат
xШестнадцатеричный формат (в нижнем регистре)
XШестнадцатеричный формат (в верхнем регистре)
То же, что и d, но использует местную настройку для разделения числа
eЭкспоненциальная запись (e в нижнем регистре)
EЭкспоненциальная запись (E в верхнем регистре)
fОтображать фиксированное количество знаков (по умолчанию 6)
FТо же, что и f, только отображает inf как INF, а nan как NAN
gОбщий формат. Округляет число до p значащих цифр (Точность по умолчанию: 6)
GАналогично g, но переключается к E, если число очень большое
%Проценты. Делит на 100 и добавляет % в конце

Пример с форматированием чисел:

# Целочисленные значения
print("The number is:{:d}".format(23))

# Число с плавающей точкой
print("The float number is:{:f}".format(23.5))

# Восьмеричный, Двоичный и Шестнадцатеричный формат
print("bin: {0:b}, oct: {0:o}, hex: {0:x}".format(23))

Результат:

>>> The number is:23
>>> The float number is:23.500000
>>> bin: 10111, oct: 27, hex: 17

Форматирование чисел с полями для целых и чисел с плавающей точкой:

# Целые числа с минимальной шириной
print("{:5d}".format(23))

# Ширина не работает для чисел длиннее заполнения
print("{:2d}".format(2393))

# Заполнение для чисел с плавающей точкой
print("{:8.3f}".format(23.3024))

# Целые числа с минимальной шириной, заполненные нулями
print("{:05d}".format(23))

# Заполнение для чисел с плавающей запятой, заполненных нулями
print("{:08.3f}".format(23.3043))

Результат:

>>>    23
>>> 2393
>>>   23.302
>>> 00023
>>> 0023.304

форматирование чисел со знаками:

# Показать знак +
print("{:+f} {:+f}".format(23.25, -23.25))

# Показать знак -
print("{:-f} {:-f}".format(23.25, -23.25))

# Показать место для знака +
print("{: f} {: f}".format(23.25, -23.25))

Результат:

>>> +23.250000 -23.250000
>>> 23.250000 -23.250000
>>>  23.250000 -23.250000

Форматирование чисел с выравниванием
 

ТипЗначение
<Выравнивается по левому краю
^Выравнивается по центру
>Выравнивается по правому краю
=Сдвигает знаки (+ или -) к левой позиции
# Целые числа с выравниванием по правому краю
print("{:5d}".format(24))

# Числа с плавающей точкой с выравниванием по центру
print("{:^10.3f}".format(24.2398))

# Выравнивание целого числа по левому краю заполнено нулями
print("{:<05d}".format(24))

# Числа с плавающей точкой с выравниванием по центру
print("{:=8.3f}".format(-24.9824))

Результат:

>>>    24
>>>   24.240
>>> 24000
>>> - 24.982

Такие же методы выравнивания применяются и для строк. 

# Отступ строки с выравниванием по левому краю
print("{:5}".format("Dog"))

# Отступ строки с выравниванием по правому краю
print("{:>5}".format("Dog"))

# Заполнение строк с выравниванием по центру
print("{:^5}".format("Dog"))

# Заполнение строк с выравниванием по центру
# И '*' - символ заполнения
print("{:*^5}".format("Dog"))

Результат:

>>> Dog
>>>   Dog
>>>  Dog
>>> *Dog*

Пример обрезания строк:

# Обрезание строк до 4 букв
print("{:.4}.".format('Hello'))

# Обрезание строк до 4 букв и заполнение
print("{:5.4}.".format("Hello"))

# Обрезание строк до 4 букв,
# Заполнение и выравнивание по центру
print("{:^5.4}.".format("Hello"))

Результат:

>>> Hell.
>>> Hell .
>>> Hell .

Форматирование элементов классов и словарей с format()

# Задаем класс Student
class Student:
    name = 'Vladislav'
    age = 23

# Форматируем с помощью format
print("{student.name} age is: {student.age}".format(student=Student()))

Результат:

>>> Vladislav age is: 23

Со словарем:

# Объявляем словарь student
student_dict = {'age': 23, 'name': 'Vladislav'}

# Форматирование возраста
print('{student[name]} age is: {student[age]}'.format(student=student_dict))

Результат:

>>> Vladislav age is: 23

Аргументы как параметры в format()

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

# Динамический шаблон формата строки
string = "{:{fill}{align}{width}}"

# Передача кодов формата в качестве аргументов
print(string.format('Vladislav', fill='*', align='^', width=5))

# Динамический шаблон формата float
num = "{:{align}{width}.{precision}f}"

# Передача кодов формата в качестве аргументов
print(num.format(23.98, align='<', width=8, precision=2))

Результат:

>>> Vladislav
>>> 23.98

Пояснение:

  • В первом пример Vladislav — это позиционный аргумент, который будет отформатирован. Аналогично fill='*', align='^' и width=5 являются аргументами-ключевыми словами.
  • В шаблоне строки эти аргументы извлекаются не как обычные строки для вывода, а как коды форматирования: fill, align и width.
  • Эти аргументы заменяют соответствующие заполнители, а строка Vladislav соответствующим образом форматируется.
  • Во втором примере 23.98 — это позиционный аргумент, а align, with и precision передаются в шаблон в качестве параметров форматирования.

Дополнительные параметры форматирования с format()

format() также поддерживает форматирования по типам, например, для datetime или форматирование сложных чисел. Он внутренне вызывает __format__() для datetime и получает доступ к атрибутам сложных чисел.

import datetime

# datetime форматирование
date = datetime.datetime.now()

print("It's now: {:%Y/%m/%d %H:%M:%S}".format(date))

# Форматирование комплексных чисел
complexNumber = 3 + 2j

print('Real part: {0.real} and Imaginary part: {0.imag}'.format(complexNumber))


# Пользовательский метод __format__()
class Student:
    def __format__(self, format):
        if format == 'age':
            return '23'
        return 'None'


print('Vladislav age is: {:age}'.format(Student()))

Результат:

>>> It's now: 2022/10/16 18:52:49
>>> Real part: 3.0 and Imaginary part: 2.0
>>> Vladislav age is: 23

Пояснение:

  • Для datetime: текущий объект datetime передается в качестве позиционного аргумента в метод format(). С помощью метода __format__() функция format() получает доступ к году, месяцу, дню, часу, минуте и секунде.
  • Для комплексных чисел: 3+2j преобразуется в объект ComplexNumber. Затем числа форматируются с помощью доступа к real атрибутам и атрибутам imag.
  • Переопределение format(): Как и в случае с datetime, вы можете переопределить метод __format__() своим собственным форматированием, которое будет возвращать возраст при доступе через {:age}.

Подобно __format__(), вы можете легко переопределить методы __str__() и __repr__() у объекта.

Условные обозначения str() и repr() (!r и !s) с format():

# __str__() и __repr__() сокращенно !r и !s
print("Quotes: {0!r}, Without Quotes: {0!s}".format("cat"))

# Реализация для класса __str__() и __repr__()
class Person:
    def __str__(self):
        return "STR"
    def __repr__(self):
        return "REPR"

print("repr: {p!r}, str: {p!s}".format(p=Person()))

Результат:

>>> Quotes: 'cat', Without Quotes: cat
>>> repr: REPR, str: STR

Источником послужил сайт pythonru.com

Теги записи: Python, Основы Python, Строки,
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)