Форматирование строк
Часто форматирование строк связано с их выводом на экран. Однако следует помнить, что на вывод передается уже сформированная строка. Создание строки, то есть вставка в нее данных в заданных форматах, является отдельной операцией. Готовая строка может быть, например, присвоена переменной, а не выводиться сразу на экран.
% - оператор форматирования строки
Оператор %
по отношению к строкам выполняет операцию форматирования и вставки таким образом, что объект, стоящий справа от него, встраивается согласно определенным правилам в строку слева от него:
string % value
Такой способ форматирования считается старым потому, что заимствован из функции printf
языка C, а в Python кроме него появились другие способы вставки данных в "строки-шаблоны". Однако в ряде случаев удобнее использовать оператор %
.
Вывод вещественного числа с заданной точностью
Оператор деления /
возвращает вещественное число. Если количество знаков после запятой бесконечно, интерпретатор Python выведит его с большим количеством знаков в дробной части:
a = 4 / 3
print(a)
1.3333333333333333
С помощью оператора форматирования строки %
можно выполнить округление числа до требуемой точности. Например, оставить только два знака после запятой. Для этого внутри строки, то есть в кавычках, записывают комбинацию символов, которая начинается со знака %
. Далее ставят точку. Число после точки обозначает количество знаков после запятой. Символ f
обозначает вещественный тип данных float
.
a = 4 / 3
print('%.2f' % a)
1.33
Обратите внимание, переменная a содержит число с большим количеством знаков в дробной части. Строка '1.33'
является результатом выполнения выражения '%.2f' % a
. Функции print()
передается готовая строка '1.33'
. Предварительно эту строку можно было бы присвоить отдельной переменной:
a = 4 / 3
b = '%.2f' % a
print(b)
С другой стороны, по правую сторону от оператора форматирования строки не обязательно указывать переменную. Чаще здесь записывают непосредственно выражение. При этом берут его в скобки.
print('%.2f' % (4 / 3))
1.33
Строка, содержащая в себе спецификаторы преобразования, также может содержать обычные символы:
print('A = %.1f, B = %d' % (3, 4))
A = 3.0, B = 4
Символ d
в формате вставки обозначает целое число (тип int
).
Оператор форматирования строк выполняет округление вещественных чисел, а не простое отбрасывание "лишних" цифр:
print('%.2f, %.2f' % (0.123, 0.126))
0.12, 0.13
Вывод символа
Чтобы получить любой символ из таблицы Unicode, в спецификаторе используют букву c
, при этом после знака оператора форматирования указывают код требуемого символа.
print('%c' % 189)
print('%c' % 32400)
½
纐
Вставка в строку значений словаря через ключи
ab = {'good': 'AB', 'price': 2.3, 'qty': 8}
print('%(good)s, %(price).2f' % ab)
AB, 2.30
Вывод данных в поля заданной ширины
Бывает данные надо вывести в виде таблицы. Это значит, что каждый элемент данных выводится в поле определенной ширины, которая измеряется в знакоместах.
Например, вместо подобного вывода:
First 483 1.1
Second 9 10.7
надо получить:
First 483 1.1
Second 9 10.7
Для таких случаев в формате вставки элемента данных в строку указывается ширина поля (количество знакомест). Делается это сразу после знака процента.
print('%-7s %5d %8.1f' % ('First', 483, 1.1))
print('%-7s %5d %8.1f' % ('Second', 9, 10.65))
Знак "минус" заставляет данные выравниваться по левому краю. По умолчанию они выравниваются по правому:
print('%7s %5d' % ('First', 483))
print('%7s %5d' % ('Second', 9))
First 483
Second 9
Строковый метод format
Строковый метод format
вставляет переданные в него аргументы в строку, к которой применяется. В строке места вставки, или "поля замены", определяются фигурными скобками. Внутри скобок могут указываться индексы или ключи аргументов, переданных в метод format.
print("{}, {} and {}".format('A', 8, 'B'))
print("{1}, {0} and {2}".format('A', 8, 'B'))
A, 8 and B
8, A and B
В format()
может передоваться больше аргументов, чем имеется мест вставок в строке. В таком случае оставшиеся аргументы игнорируются.
nums = ['I', 'II', 'III', 'IV', 'V']
print("{} {} {}".format(*nums))
print("{0} {4}".format(*nums))
I II III
I V
Вставка значений по ключу:
print('{var} = {value}'.format(var='pi', value=3.14))
pi = 3.14
u = {'name': 'Bob','age': 35}
print('{name}-{age}'.format(**u))
print('{name}'.format(**u))
print('{0}-{age}'.format('John', **u))
Bob-35
Bob
John-35
Вывод атрибутов объекта:
class House:
size = 5
street = "Red"
h = House()
print('{0.size}, {0.street}'.format(h))
5, Red
Метод format
позволяет задавать ширину поля и выравнивание:
u = {'name': 'Bob','age': 35}
print('{name:10}-{age:4}-'.format(**u))
print('{name:>10}-{age:>4}-'.format(**u))
print('{name:^10}-{age:^4}-'.format(**u))
Bob - 35-
Bob- 35-
Bob - 35 -
Вывод вещественных чисел:
print('{}'.format(4/3))
print('{0:f}'.format(4/3))
print('{:.2f}'.format(4/3))
print('{0:10.2f}'.format(4/3))
print('{0:e}'.format(4/3))
1.3333333333333333
1.333333
1.33
1.33
1.333333e+00
Форматированные строковые литералы
В последних версиях Python появилась возможность использовать так называемые форматированные строковые литералы (formatted string literals). В отличие от обычных строковых литералов перед f-строками ставится буква f
.
В теле строки могут находиться включения в фигурных скобках. В процессе выполнения программы интерпретатор исполняет выражения в фигурных скобках, вставляя их результат в соответстующие места строки.
user = input()
print(f'Hello {user}!')
a = 4.5678
print(f'Result {a:5.2f}')
Bob
Hello Bob!
Result 4.57
print(f'Hello {input()}!')
a = 4
b = 3
print(f'Result {a/b:5.2f}')
John
Hello John!
Result 1.33
Выравнивание строк другими строковыми методами
a = "Hello"
print('|', a.center(10), '|')
print(a.rjust(14))
print(a.ljust(10))
print(a.ljust(14, '.'))
print(a.center(14, '.'))
| Hello |
Hello
Hello
Hello.........
....Hello.....