MyTetra Share
Делитесь знаниями!
Форматирование строк. Метод format
Время создания: 29.07.2019 23:51
Раздел: !Закладки - Python - Модули

Форматирование строк. Метод format

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

Форматирование строк с помощью метода format

Если для подстановки требуется только один аргумент, то значение - сам аргумент:

>>>

>>> 'Hello, {}!'.format('Vasya')

'Hello, Vasya!'


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

>>>

>>> '{0}, {1}, {2}'.format('a', 'b', 'c')

'a, b, c'

>>> '{}, {}, {}'.format('a', 'b', 'c')

'a, b, c'

>>> '{2}, {1}, {0}'.format('a', 'b', 'c')

'c, b, a'

>>> '{2}, {1}, {0}'.format(*'abc')

'c, b, a'

>>> '{0}{1}{0}'.format('abra', 'cad')

'abracadabra'

>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')

'Coordinates: 37.24N, -115.81W'

>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}

>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)

'Coordinates: 37.24N, -115.81W'


Однако метод format умеет большее. Вот его синтаксис:

поле замены ::= "{" [имя поля] ["!" преобразование] [":" спецификация] "}"

имя поля ::= arg_name ("." имя атрибута | "[" индекс "]")*

преобразование ::= "r" (внутреннее представление) | "s" (человеческое представление)

спецификация ::= см. ниже


Например:

>>>

>>> "Units destroyed: {players[0]}".format(players = [1, 2, 3])

'Units destroyed: 1'

>>> "Units destroyed: {players[0]!r}".format(players = ['1', '2', '3'])

"Units destroyed: '1'"


Теперь спецификация формата:

спецификация ::= [[fill]align][sign][#][0][width][,][.precision][type]

заполнитель ::= символ кроме '{' или '}'

выравнивание ::= "<" | ">" | "=" | "^"

знак ::= "+" | "-" | " "

ширина ::= integer

точность ::= integer

тип ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" |

"n" | "o" | "s" | "x" | "X" | "%"


Выравнивание производится при помощи символа-заполнителя. Доступны следующие варианты выравнивания:

ФлагЗначение
'<'Символы-заполнители будут справа (выравнивание объекта по левому краю) (по умолчанию).
'>'выравнивание объекта по правому краю.
'='Заполнитель будет после знака, но перед цифрами. Работает только с числовыми типами.
'^'Выравнивание по центру.

Опция "знак" используется только для чисел и может принимать следующие значения:

ФлагЗначение
'+'Знак должен быть использован для всех чисел.
'-''-' для отрицательных, ничего для положительных.
'Пробел''-' для отрицательных, пробел для положительных.

Поле "тип" может принимать следующие значения:

ТипЗначение
'd', 'i', 'u'Десятичное число.
'o'Число в восьмеричной системе счисления.
'x'Число в шестнадцатеричной системе счисления (буквы в нижнем регистре).
'X'Число в шестнадцатеричной системе счисления (буквы в верхнем регистре).
'e'Число с плавающей точкой с экспонентой (экспонента в нижнем регистре).
'E'Число с плавающей точкой с экспонентой (экспонента в верхнем регистре).
'f', 'F'Число с плавающей точкой (обычный формат).
'g'Число с плавающей точкой. с экспонентой (экспонента в нижнем регистре), если она меньше, чем -4 или точности, иначе обычный формат.
'G'Число с плавающей точкой. с экспонентой (экспонента в верхнем регистре), если она меньше, чем -4 или точности, иначе обычный формат.
'c'Символ (строка из одного символа или число - код символа).
's'Строка.
'%'Число умножается на 100, отображается число с плавающей точкой, а за ним знак %.

И напоследок, несколько примеров:

>>>

>>> coord = (3, 5)

>>> 'X: {0[0]}; Y: {0[1]}'.format(coord)

'X: 3; Y: 5'

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')

"repr() shows quotes: 'test1'; str() doesn't: test2"

>>> '{:<30}'.format('left aligned')

'left aligned '

>>> '{:>30}'.format('right aligned')

' right aligned'

>>> '{:^30}'.format('centered')

' centered '

>>> '{:*^30}'.format('centered') # use '*' as a fill char

'***********centered***********'

>>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always

'+3.140000; -3.140000'

>>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers

' 3.140000; -3.140000'

>>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}'

'3.140000; -3.140000'

>>> # format also supports binary numbers

>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)

'int: 42; hex: 2a; oct: 52; bin: 101010'

>>> # with 0x, 0o, or 0b as prefix:

>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)

'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'

>>> points = 19.5

>>> total = 22

>>> 'Correct answers: {:.2%}'.format(points/total)

'Correct answers: 88.64%'


 
MyTetra Share v.0.53
Яндекс индекс цитирования