Форматирование при помощи %
Форматирование строк в стиле printf при помощи оператора интерполяции %.
Строки и unicode реализуют поддержку оператора % (деление по модулю; оператор интерполяции строки), который используется для форматирования строк.
Оператор заменяет маркеры в строке значениями из форматируемого объекта. Подход похож на использование
Если формат требует лишь одного аргумента, то форматируемый объект может не заключаться в кортеж. В прочих случаях форматируемый объект должен являться кортежем с количеством элементов достаточным для форматирования, либо отображением, например, словарём.
Общий вид маркера:
Маркеры замены (спецификаторы преобразования) могут состоять из следущих компонентов в указанном порядке:
1. Символ
2. Опция. Имя маркера в скобках, например
Когда в качестве форматируемого объекта выступает словарь (либо другое отображение) требуется указание имени маркера. Подразумевается, что имя маркера будет совпадать с одним из ключёй отображения.
3. Опция. Флаги преобразования, влияющие на результат некоторых типов преобразований;
4. Опция. Минимальный размер. Если указан
5. Опция. Точность. Задаётся после
6. Опция. Длина. Модификатор длины (
7. Тип преобразования.
※ Альтернативная форма всегда будет содержать точку, даже если за ней не следуют цифры. Точность определяет количество знаков после точки — по умолчанию 6 (шесть).
※※ Альтернативная форма всегда будет содержать точку, а нули в конце не будут обрезаны. Точность определяет количество значащих цифр до и после точки — по умолчанию 6 (шесть).
※※※ Точность — максимальное количество символов, которые требуется вывести.
Оператор заменяет маркеры в строке значениями из форматируемого объекта. Подход похож на использование
sprintf()
в языке Си.На заметку
Если строка формата представлена в виже unicode, или какой-либо из объектов форматируемый с использованием
%s
является Unicode-объектом, то результат тоже будет unicode.Если формат требует лишь одного аргумента, то форматируемый объект может не заключаться в кортеж. В прочих случаях форматируемый объект должен являться кортежем с количеством элементов достаточным для форматирования, либо отображением, например, словарём.
'%s %d' % ('number', 5) # 'number 5'
'number %d' % 5 # 'number 5'
'%d%%' % 100 # '100%'
Общий вид маркера:
%[(имя)][флаги][минразмер][.точность]тип
.Маркеры замены (спецификаторы преобразования) могут состоять из следущих компонентов в указанном порядке:
1. Символ
%
указывает на начало маркера;2. Опция. Имя маркера в скобках, например
(somename)
;Когда в качестве форматируемого объекта выступает словарь (либо другое отображение) требуется указание имени маркера. Подразумевается, что имя маркера будет совпадать с одним из ключёй отображения.
'%(left)s выше, чем %(right)s.' % {'left': 'Вася', 'right': 'Петя'}
# Вася выше, чем Петя.
3. Опция. Флаги преобразования, влияющие на результат некоторых типов преобразований;
# | Использовать альтернативную форму представления (если доступна для выбранного типа преобразования). |
0 | Добить число нулями. |
- | Равнение влево. Перекрывает флаг 0 , если тот указан. |
пробел | Добавить пробел перед положительным числом (или пустой строкой). |
+ | Добавить знак числа — + или - . Перекрывает флаг пробел . |
'%04d' % 5 # '-005'
'%04d' % 5 # '0005'
'%4d' % -5 # ' -5'
'%-4d' % -5 # '-5 '
'% d' % 5 # ' 5'
'% d' % -5 # '-5'
'%d' % 5 # '5'
'%+d' % 5 # '+5'
4. Опция. Минимальный размер. Если указан
*
(астериск), размер будет считан из форматируемого кортежа; '%d' % 5 # '5'
'%3d' % 5 # ' 5'
'%*d' % (3, 5) # ' 5'
5. Опция. Точность. Задаётся после
.
(точки). Если указан *
(астериск), размер будет считан из форматируемого кортежа; '%f' % 5 # '5.000000'
'%.2f' % 5 # '5.00'
'%.*f' % (2, 5) # '5.00'
6. Опция. Длина. Модификатор длины (
h
, l
, или L
) можно указать, но он будет проигнорирован, так как не используется в Питоне %ld
то же что и %d
.;7. Тип преобразования.
d / i | Знаковое целое. Десятичный формат. |
o | Знаковое восьмеричное. В альтернативной форме добавляется ведущий 0 (ноль), если его нет. |
u | Устаревший тип, то же что и d . См. PEP-237. |
x , X | Знаковое шестнадцатеричное (нижний и верхний регистр соответственно). В альтернативной форме добавляется ведущий 0x 0X , если его нет. |
e , E | С плавающей запятой (нижний и верхний регистр соответственно). Экспоненциальный формат. ※ |
f , F | С плавающей запятой. Десятичный формат. +py2.7 +py3.1 Данный формат для чисел с абсолютным значением превышающим 1e50 более не заменяется на %g . ※ |
g , G | С плавающей запятой. Использует экспон. формат, если экспонента меньше -4, иначе десятичный. ※※ |
c | Одиночный символ. Может принять целое, либо строку с одним символом. |
r | +py2.0 Строка. Использует repr(). ※※※ |
s | Строка. Испольует str(). ※※※ |
a | +py3.0 Строка. Использует ascii(). ※※※ |
% | Используется для получения символа % в результирующей строке. |
※ Альтернативная форма всегда будет содержать точку, даже если за ней не следуют цифры. Точность определяет количество знаков после точки — по умолчанию 6 (шесть).
※※ Альтернативная форма всегда будет содержать точку, а нули в конце не будут обрезаны. Точность определяет количество значащих цифр до и после точки — по умолчанию 6 (шесть).
※※※ Точность — максимальное количество символов, которые требуется вывести.
На заметку
Ввиду того, что длина строки в Питоне является признаком объекта, преобразование
%s
не считает символ \0
окончанием строки.
Синонимы поиска: Форматирование при помощи %, %, modulo, %d, %s, printf
В разделе «str (строка)»:
str.capitalize
str.casefold
str.center
str.count
str.decode
str.encode
str.endswith
str.expandtabs
str.find
str.format
str.format_map
str.index
str.isalnum
str.isalpha
str.isascii
str.isdecimal
str.isdigit
str.isidentifier
str.islower
str.isnumeric
str.isprintable
str.isspace
str.istitle
str.isupper
str.join
str.ljust
str.lower
str.lstrip
str.maketrans
str.partition
str.replace
str.rfind
str.rindex
str.rjust
str.rpartition
str.rsplit
str.rstrip
str.split
str.splitlines
str.startswith
str.strip
str.swapcase
str.title
str.translate
str.upper
str.zfill
Форматные строки (f-string)
На заметку
Зарегистрированные пользователи могут публиковать свои мнения относительно Книг, Видео, Статей других авторов и прочего в разделе Обсуждений.