Форматированный вывод, форматирование строк на Python

Старый способ — строковый оператор форматирования

Оператор % по отношению к строкам выполняет операцию форматирования и вставки таким образом, что объект, стоящий справа от него, встраивается согласно определенным правилам в строку слева от него:

string % value

Такой способ форматирования считается старым видимо потому, что заимствован из функции printf() языка C, а в Python кроме него появились более продвинутые средства форматирования вывода. Однако в ряде случаев использование оператора % бывает удобнее, чем использование строкового метода format().

Следует отметить, что форматируются строки, а не вывод. На вывод передается уже сформированная строка.

Как вывести вещественное число с необходимой точностью

Оператор деления / возвращает вещественное число. Если количество знаков бесконечно, то Python выведет его в таком виде: 

>>> 4 / 3
1.3333333333333333

Обычно требуется лишь определенное количество знаков. Для этого в строку записывают комбинацию символов, начинающуюся с %. Число после точки обозначает количество знаков после запятой. Символ f обозначает вещественный тип данных float.

>>> "%.4f" % (4/3)
'1.3333'

Ставить скобки обязательно, иначе операция % выполняется раньше /:

>>> "%.4f" % 4/3
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    "%.4f" % 4/3
TypeError: unsupported operand type(s) for /: 'str' and 'int'

Оператор форматирования строк выполняет округление, а не урезание:

>>> "%.4f" % (1.33335)
'1.3334'
>>> "%.4f" % (1.33334)
'1.3333'

С функцией print():

>>> print("Number %.4f" % (1.33334))
Number 1.3333
>>> print("%.4f, %.2f" % (1.33334, 153*0.43))
1.3333, 65.79
>>> print("%f, %f" % (1.33334, 153*0.43))
1.333340, 65.790000
>>> 153*0.43
65.78999999999999

Вывод символа по номеру

>>> "%c" % 121
'y'
>>> "%c" % 189
'½'
>>> "%c" % 255
'ÿ'
>>> "%c" % 999
'ϧ'
>>> "%c" % 32400
'纐'

Если вместо символа ‘c' использовать ‘d', будет вставлено само целое число.

  Високосный год или нет на Python

Вставка в строку значений через ключ словаря

>>> '%(1)s, %(2).3f' % {'1': 'AB', '2': 2.33333}
'AB, 2.333'

Вывод данных в поля заданной ширины

Бывает данные на экран надо вывести не через один пробел, а в виде таблицы. Другими словами, в полях определенной ширина, где ширина измеряется в знакоместах.

Рассмотрим пример. Допустим надо вывести числа второй строки под числами первой. Если выполнить функцию print() так:

print(10, 235)
print(1000, 50)

результат будет таким:

10 235
1000 50

Чтобы привести вывод к табличному виду, необходимо задать ширину поля:

print("%5d%7d" % (10, 235))
print("%5d%7d" % (1000, 50))

Результат:

   10     235
 1000      50

Здесь в кавычках указаны форматы данных и ширина полей. После знака % за кавычками указаны данные, которые будут подставлены вместо каждого указанного формата. Если количество форматов не совпадает с количеством данных, возникнет ошибка.

Форматы данных могут быть: d — целое число, s — строка, f — вещественное число, c — символ.

По умолчанию данные выравниваются по правому краю поля. Чтобы выровнять их по левому, достаточно поставить знак минус перед числом, обозначающим ширину поля. Пример:

print("%-5d%7d" % (10, 235))
print("%-5d%7d" % (1000, 50))

Вывод:

10       235
1000      50

Новый способ форматирования — метод format()

Строковый метод format() возвращает отформатированную версию строки, заменяя идентификаторы в фигурных скобках. Идентификаторы могут быть позиционными, числовыми индексами, ключами словарей, именами переменных.

Аргументов в format() может быть больше, чем идентификаторов в строке. В таком случае оставшиеся игнорируются.

Идентификаторы могут быть либо индексами аргументов, либо ключами:

>>> "{}, {} and {}".format('one', 1, 'I')
'one, 1 and I'
>>> "{1}, {2} and {0}".format('one', 1, 'I')
'1, I and one'
>>> nums = [3, 4, 5, 6, 2, 0]
>>> "{}{}{}".format(*nums)
'345'
>>> "{0}{2}{4}".format(*nums)
'352'
>>> u = {'name':'bob','age':35}
>>> '{name}-{age}'.format(**u)
'bob-35'
>>> '{name}'.format(**u)
'bob'
>>> '{name}-{age}'.format(name="pi",age=3.14)
'pi-3.14'
>>> '{0}-{age}'.format("sin",**u)
'sin-35'

Вывод атрибутов объекта:

>>> class house:
	size = "big"
	street = "main"
 
>>> h = house()
>>> '{0.size}, {0.street}'.format(h)
'big, main'

Можно задавать ширину поля и выравнивание:

>>> '{name:10}-{age:3}'.format(**u)
'bob       - 35'
>>> '{name:>10}-{age:>3}'.format(**u)
'       bob- 35'
>>> '{name:^10}-{age:^3}'.format(**u)
'   bob    -35 '

Вывод вещественных чисел:

>>> '{0}'.format(4/3)
'1.3333333333333333'
>>> '{0:f}'.format(4/3)
'1.333333'
>>> '{0:.2f}'.format(4/3)
'1.33'
>>> '{0:10.2f}'.format(4/3)
'      1.33'
>>> '{0:10e}'.format(4/3)
'1.333333e+00'

Выравнивание строк другими строковыми методами

>>> a = "Hello"
>>> a.center(10)
'  Hello   '
>>> a.rjust(10)
'     Hello'
>>> a.ljust(10)
'Hello     '
>>> a.ljust(10,'.')
'Hello.....'
>>> a.center(10,'.')
'..Hello...'
>>> "%s" % (a.center(19))
'       Hello       '

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Python для начинающих
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x