Документация Python неофициальный перевод

string.md

492 строк · 49.4 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.5/library/string.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 6.1. [`string`](https://python-all.ru/3.5/library/string.html#module-string) – Общие операции со строками89**Исходный код:** [Lib/string.py](https://python-all.ru/src/3.5/Lib/string.py)1011---1213> **См. также**14>15> [Тип текстовой последовательности – str](https://python-all.ru/3.5/library/stdtypes.html#textseq)16>17> [Методы строк](https://python-all.ru/3.5/library/stdtypes.html#string-methods)1819## 6.1.1. Строковые константы2021Константы, определённые в этом модуле:2223#### `string.ascii_letters`2425Конкатенация констант [`ascii_lowercase`](https://python-all.ru/3.5/library/string.html#string.ascii_lowercase) и [`ascii_uppercase`](https://python-all.ru/3.5/library/string.html#string.ascii_uppercase), описанных ниже. Это значение не зависит от локали.2627#### `string.ascii_lowercase`2829Строчные буквы `'abcdefghijklmnopqrstuvwxyz'`. Это значение не зависит от локали и не изменится.3031#### `string.ascii_uppercase`3233Заглавные буквы `'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`. Это значение не зависит от локали и не изменится.3435#### `string.digits`3637Строка `'0123456789'`.3839#### `string.hexdigits`4041Строка `'0123456789abcdefABCDEF'`.4243#### `string.octdigits`4445Строка `'01234567'`.4647#### `string.punctuation`4849Строка символов ASCII, которые считаются знаками пунктуации в локали `C`.5051#### `string.printable`5253Строка ASCII-символов, которые считаются печатаемыми. Представляет собой комбинацию [`digits`](https://python-all.ru/3.5/library/string.html#string.digits), [`ascii_letters`](https://python-all.ru/3.5/library/string.html#string.ascii_letters), [`punctuation`](https://python-all.ru/3.5/library/string.html#string.punctuation), и [`whitespace`](https://python-all.ru/3.5/library/string.html#string.whitespace).5455#### `string.whitespace`5657Строка, содержащая все ASCII-символы, которые считаются пробельными. Включает символы: пробел, табуляция, перевод строки, возврат каретки, прогон страницы и вертикальная табуляция.5859## 6.1.2. Пользовательское форматирование строк6061Встроенный класс строк предоставляет возможность выполнять сложные замены переменных и форматирование значений с помощью метода [`format()`](https://python-all.ru/3.5/library/stdtypes.html#str.format), описанного в [**PEP 3101**](https://python-all.ru/3.5/library/string.html). Класс [`Formatter`](https://python-all.ru/3.5/library/string.html#string.Formatter) из модуля [`string`](https://python-all.ru/3.5/library/string.html#module-string) позволяет создавать и настраивать собственное поведение форматирования строк, используя ту же реализацию, что и встроенный метод [`format()`](https://python-all.ru/3.5/library/stdtypes.html#str.format).6263#### `class string.Formatter`6465Класс [`Formatter`](https://python-all.ru/3.5/library/string.html#string.Formatter) имеет следующие открытые методы:6667#### `format(format_string, *args, **kwargs)`6869Основной метод API. Принимает строку форматирования и произвольный набор позиционных и именованных аргументов. Это просто обёртка, вызывающая [`vformat()`](https://python-all.ru/3.5/library/string.html#string.Formatter.vformat).7071Устарело с версии 3.5: Передача строки формата в качестве именованного аргумента *format\_string* устарела.7273#### `vformat(format_string, args, kwargs)`7475Эта функция выполняет фактическую работу по форматированию. Она представлена как отдельная функция на случай, если нужно передать предопределённый словарь аргументов, вместо распаковки и повторной упаковки словаря в отдельные аргументы с помощью синтаксиса `*args` и `**kwargs`. [`vformat()`](https://python-all.ru/3.5/library/string.html#string.Formatter.vformat) выполняет разбивку строки форматирования на символьные данные и поля замены. Затем вызываются различные методы, описанные ниже.7677Кроме того, [`Formatter`](https://python-all.ru/3.5/library/string.html#string.Formatter) определяет ряд методов, предназначенных для переопределения в подклассах:7879#### `parse(format_string)`8081Перебирает format\_string и возвращает итерируемый объект кортежей (*literal\_text*, *field\_name*, *format\_spec*, *conversion*). Используется в [`vformat()`](https://python-all.ru/3.5/library/string.html#string.Formatter.vformat) для разбивки строки на буквальный текст или поля замены.8283Значения в кортеже концептуально представляют собой фрагмент литерального текста, за которым следует одно поле подстановки. Если литерального текста нет (что может произойти, когда два поля подстановки идут подряд), то *literal\_text* будет строкой нулевой длины. Если поля подстановки нет, то значения *field\_name*, *format\_spec* и *conversion* будут равны `None`.8485#### `get_field(field_name, args, kwargs)`8687По заданному *field\_name*, возвращённому [`parse()`](https://python-all.ru/3.5/library/string.html#string.Formatter.parse) (см. выше), преобразует его в объект для форматирования. Возвращает кортеж (obj, used\_key). По умолчанию принимает строки вида, определённого в [**PEP 3101**](https://python-all.ru/3.5/library/string.html), например, “0\[name\]” или “label.title”. *args* и *kwargs* передаются так же, как в [`vformat()`](https://python-all.ru/3.5/library/string.html#string.Formatter.vformat). Возвращаемое значение *used\_key* имеет тот же смысл, что параметр *key* у [`get_value()`](https://python-all.ru/3.5/library/string.html#string.Formatter.get_value).8889#### `get_value(key, args, kwargs)`9091Извлекает значение заданного поля. Аргумент *key* может быть целым числом или строкой. Если это целое число, оно представляет индекс позиционного аргумента в *args*; если строка – именованный аргумент в *kwargs*.9293Параметр *args* устанавливается в список позиционных аргументов для [`vformat()`](https://python-all.ru/3.5/library/string.html#string.Formatter.vformat), а параметр *kwargs* – в словарь именованных аргументов.9495Для составных имён полей эти функции вызываются только для первого компонента имени поля; последующие компоненты обрабатываются через обычные операции с атрибутами и индексацией.9697Например, выражение поля «0.name» вызовет [`get_value()`](https://python-all.ru/3.5/library/string.html#string.Formatter.get_value) с аргументом *key*, равным 0. Атрибут `name` будет получен после возврата из [`get_value()`](https://python-all.ru/3.5/library/string.html#string.Formatter.get_value) вызовом встроенной функции [`getattr()`](https://python-all.ru/3.5/library/functions.html#getattr).9899Если индекс или ключевое слово ссылаются на несуществующий элемент, должно быть возбуждено исключение [`IndexError`](https://python-all.ru/3.5/library/exceptions.html#IndexError) или [`KeyError`](https://python-all.ru/3.5/library/exceptions.html#KeyError).100101#### `check_unused_args(used_args, args, kwargs)`102103Реализует проверку на неиспользованные аргументы при необходимости. Аргументы этой функции – множество всех ключей аргументов, которые фактически были использованы в строке форматирования (целые числа для позиционных аргументов и строки для именованных), а также ссылка на *args* и *kwargs*, переданные в vformat. Множество неиспользованных аргументов можно вычислить по этим параметрам. Предполагается, что [`check_unused_args()`](https://python-all.ru/3.5/library/string.html#string.Formatter.check_unused_args) возбуждает исключение, если проверка не пройдена.104105#### `format_field(value, format_spec)`106107[`format_field()`](https://python-all.ru/3.5/library/string.html#string.Formatter.format_field) просто вызывает глобальную встроенную функцию [`format()`](https://python-all.ru/3.5/library/functions.html#format). Метод предоставлен, чтобы подклассы могли переопределить его.108109#### `convert_field(value, conversion)`110111Преобразует значение (возвращённое [`get_field()`](https://python-all.ru/3.5/library/string.html#string.Formatter.get_field)) с учётом типа преобразования (как в кортеже, возвращаемом методом [`parse()`](https://python-all.ru/3.5/library/string.html#string.Formatter.parse)). Версия по умолчанию понимает типы преобразования 's' (str), 'r' (repr) и 'a' (ascii).112113## 6.1.3. Синтаксис строк форматирования114115Метод [`str.format()`](https://python-all.ru/3.5/library/stdtypes.html#str.format) и класс [`Formatter`](https://python-all.ru/3.5/library/string.html#string.Formatter) используют одинаковый синтаксис для строк форматирования (хотя в случае [`Formatter`](https://python-all.ru/3.5/library/string.html#string.Formatter) подклассы могут определять собственный синтаксис строк форматирования).116117Строки форматирования содержат «поля замены», заключённые в фигурные скобки `{}`. Всё, что не находится в скобках, считается буквальным текстом и копируется в вывод без изменений. Если нужно включить символ скобки в буквальный текст, его можно экранировать удвоением: `{{` и `}}`.118119Грамматика поля замены выглядит следующим образом:120121> ```122>123> replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"124> field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*125> arg_name          ::=  [identifier | integer]126> attribute_name    ::=  identifier127> element_index     ::=  integer | index_string128> index_string      ::=  <any source character except "]"> +129> conversion        ::=  "r" | "s" | "a"130> format_spec       ::=  <described in the next section>131> ```132133В менее формальных терминах, поле замены может начинаться с *field\_name*, который задаёт объект, чьё значение должно быть отформатировано и вставлено в вывод вместо поля замены. За *field\_name* может опционально следовать поле *conversion*, которому предшествует восклицательный знак `'!'`, и *format\_spec*, которому предшествует двоеточие `':'`. Они задают нестандартный формат для заменяемого значения.134135См. также раздел [Мини-язык спецификации формата](https://python-all.ru/3.5/library/string.html#formatspec).136137Сам *field\_name* начинается с *arg\_name*, который является либо числом, либо ключевым словом. Если это число, оно относится к позиционному аргументу, а если ключевое слово – к именованному аргументу. Если числовые arg\_names в строке форматирования идут по порядку 0, 1, 2, …, их все можно опустить (а не только некоторые), и числа 0, 1, 2, … будут автоматически подставлены в этом порядке. Поскольку *arg\_name* не ограничен кавычками, невозможно указать произвольные ключи словаря (например, строки `'10'` или `':-]'`) внутри строки форматирования. За *arg\_name* может следовать любое количество выражений индекса или атрибута. Выражение вида `'.name'` выбирает именованный атрибут с помощью [`getattr()`](https://python-all.ru/3.5/library/functions.html#getattr), а выражение вида `'[index]'` выполняет поиск по индексу с помощью [`__getitem__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__getitem__).138139Изменено в версии 3.1: Указатели позиционных аргументов можно опускать, поэтому `'{} {}'` эквивалентно `'{0} {1}'`.140141Несколько простых примеров строк форматирования:142143```python144"First, thou shalt count to {0}"  # Ссылается на первый позиционный аргумент145"Bring me a {}"                   # Неявно ссылается на первый позиционный аргумент146"From {} to {}"                   # То же, что "From {0} to {1}"147"My quest is {name}"              # Ссылается на именованный аргумент 'name'148"Weight in tons {0.weight}"       # Атрибут 'weight' первого позиционного аргумента149"Units destroyed: {players[0]}"   # Первый элемент именованного аргумента 'players'.150```151152Поле *conversion* вызывает приведение типа перед форматированием. Обычно задачу форматирования значения выполняет его собственный метод [`__format__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__format__). Однако в некоторых случаях требуется принудительно отформатировать тип как строку, переопределяя его собственное определение форматирования. Преобразовав значение в строку перед вызовом [`__format__()`](https://python-all.ru/3.5/reference/datamodel.html#object.__format__), можно обойти обычную логику форматирования.153154В настоящее время поддерживаются три флага преобразования: `'!s'` вызывает [`str()`](https://python-all.ru/3.5/library/stdtypes.html#str) для значения, `'!r'` вызывает [`repr()`](https://python-all.ru/3.5/library/functions.html#repr), и `'!a'` вызывает [`ascii()`](https://python-all.ru/3.5/library/functions.html#ascii).155156Несколько примеров:157158```python159"Harold's a clever {0!s}"        # Сначала вызывает str() для аргумента160"Bring out the holy {name!r}"    # Сначала вызывает repr() для аргумента161"More {!a}"                      # Сначала вызывает ascii() для аргумента162```163164Поле *format\_spec* содержит спецификацию того, как должно быть представлено значение, включая такие детали, как ширина поля, выравнивание, заполнение, десятичная точность и так далее. Каждый тип значения может определять свой собственный «мини-язык форматирования» или интерпретацию *format\_spec*.165166Большинство встроенных типов поддерживают общий мини-язык форматирования, который описан в следующем разделе.167168Поле *format\_spec* также может содержать вложенные поля подстановки. Эти вложенные поля подстановки могут содержать имя поля, флаг преобразования и спецификацию формата, но более глубокая вложенность не допускается. Поля подстановки внутри format\_spec подставляются перед интерпретацией строки *format\_spec*. Это позволяет динамически задавать форматирование значения.169170Смотрите раздел [Примеры форматирования](https://python-all.ru/3.5/library/string.html#formatexamples) для примеров.171172### 6.1.3.1. Мини-язык спецификаций формата173174«Спецификации формата» используются внутри полей замены, содержащихся в строке форматирования, чтобы определить, как представляются отдельные значения (см. [Синтаксис строк форматирования](https://python-all.ru/3.5/library/string.html#formatstrings)). Они также могут передаваться напрямую встроенной функции [`format()`](https://python-all.ru/3.5/library/functions.html#format). Каждый форматируемый тип может определять, как должна интерпретироваться спецификация формата.175176Большинство встроенных типов реализуют следующие параметры для спецификаций формата, хотя некоторые параметры форматирования поддерживаются только числовыми типами.177178Общее правило: пустая строка формата (`""`) даёт тот же результат, что и вызов [`str()`](https://python-all.ru/3.5/library/stdtypes.html#str) для значения. Непустая строка формата обычно изменяет результат.179180Общий вид *стандартного спецификатора формата*:181182```183184format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]185fill        ::=  <any character>186align       ::=  "<" | ">" | "=" | "^"187sign        ::=  "+" | "-" | " "188width       ::=  integer189precision   ::=  integer190type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"191```192193Если указано допустимое значение *align*, перед ним может стоять символ *fill*, которым может быть любой символ, а если он опущен, по умолчанию используется пробел. Невозможно использовать литеральную фигурную скобку («`{`» или «`}`») в качестве символа *fill* при использовании метода [`str.format()`](https://python-all.ru/3.5/library/stdtypes.html#str.format). Однако можно вставить фигурную скобку с помощью вложенного поля замены. Это ограничение не влияет на функцию [`format()`](https://python-all.ru/3.5/library/functions.html#format).194195Значение различных параметров выравнивания следующее:196197> | Параметр | Значение |198> | --- | --- |199> | `'<'` | Выравнивает поле по левому краю в пределах доступного пространства (это значение по умолчанию для большинства объектов). |200> | `'>'` | Выравнивает поле по правому краю в пределах доступного пространства (это значение по умолчанию для чисел). |201> | `'='` | Принудительно размещает отступ после знака (если он есть), но перед цифрами. Используется для вывода полей в формате ‘+000000120’. Эта опция выравнивания действительна только для числовых типов. Она становится значением по умолчанию, когда ‘0’ непосредственно предшествует ширине поля. |202> | `'^'` | Выравнивает поле по центру в пределах доступного пространства. |203204Обратите внимание, что если не задана минимальная ширина поля, ширина поля всегда будет равна размеру заполняемых данных, поэтому в этом случае параметр выравнивания не имеет смысла.205206Параметр *sign* допустим только для числовых типов и может быть одним из следующих:207208> | Параметр | Значение |209> | --- | --- |210> | `'+'` | указывает, что знак должен выводиться как для положительных, так и для отрицательных чисел. |211> | `'-'` | указывает, что знак должен выводиться только для отрицательных чисел (это поведение по умолчанию). |212> | пробел | указывает, что перед положительными числами должен ставиться пробел, а перед отрицательными – знак минус. |213214Опция `'#'` приводит к использованию «альтернативной формы» для преобразования. Альтернативная форма определяется по-разному для разных типов. Эта опция действительна только для целых чисел, чисел с плавающей запятой, комплексных чисел и типа Decimal. Для целых чисел при использовании двоичного, восьмеричного или шестнадцатеричного вывода эта опция добавляет к выходному значению соответствующий префикс `'0b'`, `'0o'` или `'0x'`. Для чисел с плавающей запятой, комплексных чисел и Decimal альтернативная форма приводит к тому, что результат преобразования всегда содержит символ десятичной точки, даже если за ним не следует цифр. Обычно символ десятичной точки появляется в результате этих преобразований только если за ним следует цифра. Кроме того, для преобразований `'g'` и `'G'` хвостовые нули не удаляются из результата.215216Параметр `','` указывает на использование запятой в качестве разделителя тысяч. Для разделителя, учитывающего локаль, используйте тип представления целых чисел `'n'`.217218Изменено в версии 3.1: Добавлена опция `','` (см. также [**PEP 378**](https://python-all.ru/3.5/library/string.html)).219220*ширина* – целое десятичное число, задающее минимальную ширину поля. Если не указано, ширина поля определяется содержимым.221222Если явное выравнивание не задано, перед полем *width* с символом ноля (`'0'`) включается знако-зависимое заполнение нулями для числовых типов. Это эквивалентно символу *fill* равному `'0'` с типом *alignment* равным `'='`.223224Параметр *precision* – десятичное число, указывающее, сколько цифр должно быть отображено после десятичной точки для значения с плавающей запятой, отформатированного с помощью `'f'` и `'F'`, или до и после десятичной точки для значения с плавающей запятой, отформатированного с помощью `'g'` или `'G'`. Для нечисловых типов этот параметр указывает максимальный размер поля – другими словами, сколько символов будет использовано из содержимого поля. Параметр *precision* не допускается для целых чисел.225226Наконец, *тип* определяет, как должны быть представлены данные.227228Доступные типы представления для строк:229230> | Тип | Значение |231> | --- | --- |232> | `'s'` | Формат строки. Это тип по умолчанию для строк и может быть опущен. |233> | None | То же, что и `'s'`. |234235Доступные типы представления для целых чисел:236237> | Тип | Значение |238> | --- | --- |239> | `'b'` | Двоичный формат. Выводит число в системе с основанием 2. |240> | `'c'` | Символ. Преобразует целое число в соответствующий символ Юникода перед выводом. |241> | `'d'` | Десятичное целое. Выводит число в системе с основанием 10. |242> | `'o'` | Восьмеричный формат. Выводит число в системе с основанием 8. |243> | `'x'` | Шестнадцатеричный формат. Выводит число по основанию 16, используя строчные буквы для цифр больше 9. |244> | `'X'` | Шестнадцатеричный формат. Выводит число по основанию 16, используя заглавные буквы для цифр больше 9. |245> | `'n'` | Число. То же, что и `'d'`, за исключением того, что для вставки соответствующих разделителей групп разрядов используется текущая локаль. |246> | None | То же, что и `'d'`. |247248В дополнение к указанным выше типам представления целые числа можно форматировать с помощью типов представления чисел с плавающей запятой, перечисленных ниже (кроме `'n'` и `None`). В этом случае для преобразования целого числа в число с плавающей запятой перед форматированием используется [`float()`](https://python-all.ru/3.5/library/functions.html#float).249250Доступные типы представления для чисел с плавающей запятой и десятичных чисел:251252> | Тип | Значение |253> | --- | --- |254> | `'e'` | Экспоненциальная запись. Выводит число в научной нотации, используя букву 'e' для обозначения показателя степени. Точность по умолчанию – `6`. |255> | `'E'` | Экспоненциальная запись. То же, что и `'e'`, за исключением того, что в качестве разделителя используется прописная буква 'E'. |256> | `'f'` | Фиксированная точка. Отображает число в формате с фиксированной точкой. Точность по умолчанию: `6`. |257> | `'F'` | Фиксированная точка. То же, что и `'f'`, но преобразует `nan` в `NAN` и `inf` в `INF`. |258> | `'g'` | Общий формат. Для заданной точности `p >= 1` округляет число до `p` значащих цифр, а затем форматирует результат либо в формате с фиксированной точкой, либо в научной нотации, в зависимости от его величины. Точные правила таковы: предположим, что результат, отформатированный с типом представления `'e'` и точностью `p-1`, имел бы экспоненту `exp`. Тогда если `-4 <= exp < p`, число форматируется с типом представления `'f'` и точностью `p-1-exp`. В противном случае число форматируется с типом представления `'e'` и точностью `p-1`. В обоих случаях незначащие завершающие нули удаляются из мантиссы, а десятичная точка также удаляется, если после неё не осталось цифр. Положительная и отрицательная бесконечность, положительный и отрицательный ноль, а также nan форматируются как `inf`, `-inf`, `0`, `-0` и `nan` соответственно, независимо от точности. Точность `0` считается эквивалентной точности `1`. Точность по умолчанию – `6`. |259> | `'G'` | Общий формат. То же, что и `'g'`, за исключением того, что переключается на `'E'`, если число становится слишком большим. Представления бесконечности и NaN также переводятся в верхний регистр. |260> | `'n'` | Число. То же, что и `'g'`, за исключением того, что для вставки соответствующих разделителей групп разрядов используется текущая локаль. |261> | `'%'` | Проценты. Умножает число на 100 и выводит в фиксированном формате (`'f'`) с последующим знаком процента. |262> | None | Аналогично `'g'`, за исключением того, что запись с фиксированной точкой, при использовании, содержит хотя бы одну цифру после десятичной точки. Точность по умолчанию настолько высока, насколько необходимо для представления конкретного значения. Общий эффект заключается в том, чтобы соответствовать выводу [`str()`](https://python-all.ru/3.5/library/stdtypes.html#str), изменённому другими модификаторами формата. |263264### 6.1.3.2. Примеры форматирования265266Этот раздел содержит примеры синтаксиса [`str.format()`](https://python-all.ru/3.5/library/stdtypes.html#str.format) и сравнение со старым форматированием `%`.267268В большинстве случаев синтаксис похож на старое форматирование `%`, с добавлением `{}` и использованием `:` вместо `%`. Например, `'%03.2f'` можно преобразовать в `'{:03.2f}'`.269270Новый синтаксис форматирования также поддерживает новые и другие параметры, показанные в следующих примерах.271272Доступ к аргументам по позиции:273274```python275>>> '{0}, {1}, {2}'.format('a', 'b', 'c')276'a, b, c'277>>> '{}, {}, {}'.format('a', 'b', 'c')  # Только для версии 3.1+278'a, b, c'279>>> '{2}, {1}, {0}'.format('a', 'b', 'c')280'c, b, a'281>>> '{2}, {1}, {0}'.format(*'abc')      # Распаковка последовательности аргументов282'c, b, a'283>>> '{0}{1}{0}'.format('abra', 'cad')   # индексы аргументов могут повторяться284'abracadabra'285```286287Доступ к аргументам по имени:288289```python290>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')291'Coordinates: 37.24N, -115.81W'292>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}293>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)294'Coordinates: 37.24N, -115.81W'295```296297Доступ к атрибутам аргументов:298299```python300>>> c = 3-5j301>>> ('The complex number {0} is formed from the real part {0.real} '302...  'and the imaginary part {0.imag}.').format(c)303'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'304>>> class Point:305...     def __init__(self, x, y):306...         self.x, self.y = x, y307...     def __str__(self):308...         return 'Point({self.x}, {self.y})'.format(self=self)309...310>>> str(Point(4, 2))311'Point(4, 2)'312```313314Доступ к элементам аргументов:315316```python317>>> coord = (3, 5)318>>> 'X: {0[0]};  Y: {0[1]}'.format(coord)319'X: 3;  Y: 5'320```321322Замена `%s` и `%r`:323324```python325>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')326"repr() shows quotes: 'test1'; str() doesn't: test2"327```328329Выравнивание текста и указание ширины:330331```python332>>> '{:<30}'.format('left aligned')333'left aligned                  '334>>> '{:>30}'.format('right aligned')335'                 right aligned'336>>> '{:^30}'.format('centered')337'           centered           '338>>> '{:*^30}'.format('centered')  # использовать '*' в качестве символа заполнения339'***********centered***********'340```341342Замена `%+f`, `%-f` и `% f` и указание знака:343344```python345>>> '{:+f}; {:+f}'.format(3.14, -3.14)  # отображать всегда346'+3.140000; -3.140000'347>>> '{: f}; {: f}'.format(3.14, -3.14)  # для положительных чисел отображать пробел348' 3.140000; -3.140000'349>>> '{:-f}; {:-f}'.format(3.14, -3.14)  # отображать только минус – то же, что и '{:f}; {:f}'350'3.140000; -3.140000'351```352353Замена `%x` и `%o` и преобразование значения в разные системы счисления:354355```python356>>> # format также поддерживает двоичные числа357>>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)358'int: 42;  hex: 2a;  oct: 52;  bin: 101010'359>>> # с префиксом 0x, 0o или 0b:360>>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)361'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'362```363364Использование запятой в качестве разделителя тысяч:365366```python367>>> '{:,}'.format(1234567890)368'1,234,567,890'369```370371Выражение процентов:372373```python374>>> points = 19375>>> total = 22376>>> 'Correct answers: {:.2%}'.format(points/total)377'Correct answers: 86.36%'378```379380Использование форматирования с учётом типа:381382```python383>>> import datetime384>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)385>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)386'2010-07-04 12:15:58'387```388389Вложенные аргументы и более сложные примеры:390391```python392>>> for align, text in zip('<^>', ['left', 'center', 'right']):393...     '{0:{fill}{align}16}'.format(text, fill=align, align=align)394...395'left<<<<<<<<<<<<'396'^^^^^center^^^^^'397'>>>>>>>>>>>right'398>>>399>>> octets = [192, 168, 0, 1]400>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)401'C0A80001'402>>> int(_, 16)4033232235521404>>>405>>> width = 5406>>> for num in range(5,12): 407...     for base in 'dXob':408...         print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')409...     print()410...411    5     5     5   101412    6     6     6   110413    7     7     7   111414    8     8    10  1000415    9     9    11  1001416   10     A    12  1010417   11     B    13  1011418```419420## 6.1.4. Шаблонные строки421422Шаблоны предоставляют более простые подстановки строк, как описано в [**PEP 292**](https://python-all.ru/3.5/library/string.html). Вместо обычных подстановок на основе `%`, шаблоны поддерживают подстановки на основе `$`, используя следующие правила:423424- `$$` – это escape-последовательность; она заменяется на один символ `$`.425- `$identifier` обозначает заполнитель подстановки, соответствующий ключу отображения `"identifier"`. По умолчанию `"identifier"` ограничивается любой алфавитно-цифровой строкой ASCII без учёта регистра (включая подчёркивания), которая начинается с подчёркивания или буквы ASCII. Первый символ, не являющийся идентификатором, после символа `$` завершает спецификацию этого заполнителя.426- `${identifier}` эквивалентно `$identifier`. Это необходимо, когда после заполнителя следуют допустимые символы идентификатора, не являющиеся частью заполнителя, например `"${noun}ification"`.427428Любое другое появление `$` в строке приведёт к вызову исключения [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError).429430Модуль [`string`](https://python-all.ru/3.5/library/string.html#module-string) предоставляет класс [`Template`](https://python-all.ru/3.5/library/string.html#string.Template), реализующий эти правила. Методы [`Template`](https://python-all.ru/3.5/library/string.html#string.Template):431432#### `class string.Template(template)`433434Конструктор принимает единственный аргумент – строку шаблона.435436#### `substitute(mapping, **kwds)`437438Выполняет подстановку в шаблон, возвращая новую строку. *mapping* – это любой объект, подобный словарю, ключи которого соответствуют плейсхолдерам в шаблоне. В качестве альтернативы можно указать именованные аргументы, где имена аргументов являются плейсхолдерами. Если указаны и *mapping*, и *kwds*, и есть дубликаты, то плейсхолдеры из *kwds* имеют приоритет.439440#### `safe_substitute(mapping, **kwds)`441442Как и [`substitute()`](https://python-all.ru/3.5/library/string.html#string.Template.substitute), за исключением того, что если плейсхолдеры отсутствуют в *mapping* и *kwds*, то вместо возбуждения исключения [`KeyError`](https://python-all.ru/3.5/library/exceptions.html#KeyError) исходный плейсхолдер остаётся в результирующей строке без изменений. Кроме того, в отличие от [`substitute()`](https://python-all.ru/3.5/library/string.html#string.Template.substitute), любые другие появления `$` просто возвращают `$`, а не возбуждают [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError).443444Хотя другие исключения всё ещё могут возникать, этот метод называется «безопасным» поскольку подстановки всегда пытаются вернуть используемую строку вместо возбуждения исключения. В другом смысле [`safe_substitute()`](https://python-all.ru/3.5/library/string.html#string.Template.safe_substitute) может быть чем угодно, кроме безопасного, так как он молча игнорирует некорректные шаблоны, содержащие незакрытые разделители, непарные скобки или заполнители, не являющиеся допустимыми идентификаторами Python.445446Экземпляры [`Template`](https://python-all.ru/3.5/library/string.html#string.Template) также предоставляют один открытый атрибут данных:447448#### `template`449450Это объект, переданный в аргумент *template* конструктора. В общем случае его не следует изменять, но доступ только для чтения не гарантируется.451452Вот пример использования Template:453454```python455>>> from string import Template456>>> s = Template('$who likes $what')457>>> s.substitute(who='tim', what='kung pao')458'tim likes kung pao'459>>> d = dict(who='tim')460>>> Template('Give $who $100').substitute(d)461Traceback (most recent call last):462...463ValueError: Invalid placeholder in string: line 1, col 11464>>> Template('$who likes $what').substitute(d)465Traceback (most recent call last):466...467KeyError: 'what'468>>> Template('$who likes $what').safe_substitute(d)469'tim likes $what'470```471472Расширенное использование: можно создать подклассы [`Template`](https://python-all.ru/3.5/library/string.html#string.Template), чтобы настроить синтаксис заполнителя, символ-разделитель или всё регулярное выражение, используемое для разбора шаблонных строк. Для этого можно переопределить следующие атрибуты класса:473474- *разделитель* – это литеральная строка, описывающая разделитель, предваряющий заполнитель. Значение по умолчанию – `$`. Обратите внимание, что это *не* должно быть регулярным выражением, так как реализация при необходимости вызовет [`re.escape()`](https://python-all.ru/3.5/library/re.html#re.escape) для этой строки.475- *idpattern* – это регулярное выражение, описывающее шаблон для заполнителей без фигурных скобок (скобки будут добавлены автоматически по мере необходимости). Значением по умолчанию является регулярное выражение `[_a-z][_a-z0-9]*`.476- *flags* – флаги регулярного выражения, которые будут применяться при компиляции регулярного выражения, используемого для распознавания подстановок. Значение по умолчанию – `re.IGNORECASE`. Обратите внимание, что `re.VERBOSE` всегда будет добавляться к флагам, поэтому пользовательские *idpattern* должны соответствовать соглашениям для многострочных регулярных выражений.477478  Новое в версии 3.2.479480В качестве альтернативы можно указать всё регулярное выражение, переопределив атрибут класса *pattern*. Если это сделать, значение должно быть объектом регулярного выражения с четырьмя именованными захватывающими группами. Эти группы соответствуют правилам, приведённым выше, а также правилу недопустимых плейсхолдеров:481482- *escaped* – эта группа соответствует управляющей последовательности, например `$$`, в шаблоне по умолчанию.483- *named* – эта группа соответствует имени плейсхолдера без скобок; она не должна включать разделитель в захватывающую группу.484- *braced* – эта группа соответствует имени плейсхолдера, заключённого в скобки; она не должна включать ни разделитель, ни скобки в захватывающую группу.485- *invalid* – эта группа соответствует любому другому шаблону разделителя (обычно одиночному разделителю), и она должна появляться последней в регулярном выражении.486487## 6.1.5. Вспомогательные функции488489#### `string.capwords(s, sep=None)`490491Разбивает аргумент на слова, используя [`str.split()`](https://python-all.ru/3.5/library/stdtypes.html#str.split), делает заглавной первую букву каждого слова с помощью [`str.capitalize()`](https://python-all.ru/3.5/library/stdtypes.html#str.capitalize) и объединяет слова, начинающиеся с заглавной буквы, используя [`str.join()`](https://python-all.ru/3.5/library/stdtypes.html#str.join). Если необязательный второй аргумент *sep* отсутствует или равен `None`, последовательности пробельных символов заменяются одним пробелом, а начальные и конечные пробелы удаляются; в противном случае *sep* используется для разбиения и объединения слов.492