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

string.md

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

1> **Источник:** https://python-all.ru/2.7/library/string.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 7.1. [`string`](https://python-all.ru/2.7/library/string.html#module-string) – Общие операции со строками89**Исходный код:** [Lib/string.py](https://python-all.ru/src/2.7/Lib/string.py)1011---1213Модуль [`string`](https://python-all.ru/2.7/library/string.html#module-string) содержит ряд полезных констант и классов, а также некоторые устаревшие функции, которые также доступны в виде методов строк. Кроме того, встроенные классы строк Python поддерживают методы типов последовательностей, описанные в разделе [Sequence Types – str, unicode, list, tuple, bytearray, buffer, xrange](https://python-all.ru/2.7/library/stdtypes.html#typesseq), а также строковые методы, описанные в разделе [String Methods](https://python-all.ru/2.7/library/stdtypes.html#string-methods). Для форматированного вывода строк используйте шаблонные строки или оператор `%`, описанный в разделе [String Formatting Operations](https://python-all.ru/2.7/library/stdtypes.html#string-formatting). Также см. модуль [`re`](https://python-all.ru/2.7/library/re.html#module-re) для функций работы со строками на основе регулярных выражений.1415## 7.1.1. Константы строк1617Константы, определённые в этом модуле:1819#### `string.ascii_letters`2021Конкатенация констант [`ascii_lowercase`](https://python-all.ru/2.7/library/string.html#string.ascii_lowercase) и [`ascii_uppercase`](https://python-all.ru/2.7/library/string.html#string.ascii_uppercase), описанных ниже. Это значение не зависит от локали.2223#### `string.ascii_lowercase`2425Строчные буквы `'abcdefghijklmnopqrstuvwxyz'`. Это значение не зависит от локали и не изменится.2627#### `string.ascii_uppercase`2829Заглавные буквы `'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`. Это значение не зависит от локали и не изменится.3031#### `string.digits`3233Строка `'0123456789'`.3435#### `string.hexdigits`3637Строка `'0123456789abcdefABCDEF'`.3839#### `string.letters`4041Конкатенация строк [`lowercase`](https://python-all.ru/2.7/library/string.html#string.lowercase) и [`uppercase`](https://python-all.ru/2.7/library/string.html#string.uppercase), описанная ниже. Конкретное значение зависит от локали и будет обновлено при вызове [`locale.setlocale()`](https://python-all.ru/2.7/library/locale.html#locale.setlocale).4243#### `string.lowercase`4445Строка, содержащая все символы, считающиеся строчными буквами. В большинстве систем это строка `'abcdefghijklmnopqrstuvwxyz'`. Конкретное значение зависит от локали и будет обновлено при вызове [`locale.setlocale()`](https://python-all.ru/2.7/library/locale.html#locale.setlocale).4647#### `string.octdigits`4849Строка `'01234567'`.5051#### `string.punctuation`5253Строка ASCII-символов, которые считаются знаками пунктуации в локали `C`.5455#### `string.printable`5657Строка символов, которые считаются печатными. Представляет собой комбинацию [`digits`](https://python-all.ru/2.7/library/string.html#string.digits), [`letters`](https://python-all.ru/2.7/library/string.html#string.letters), [`punctuation`](https://python-all.ru/2.7/library/string.html#string.punctuation) и [`whitespace`](https://python-all.ru/2.7/library/string.html#string.whitespace).5859#### `string.uppercase`6061Строка, содержащая все символы, считающиеся заглавными буквами. В большинстве систем это строка `'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`. Конкретное значение зависит от локали и будет обновлено при вызове [`locale.setlocale()`](https://python-all.ru/2.7/library/locale.html#locale.setlocale).6263#### `string.whitespace`6465Строка, содержащая все символы, считающиеся пробельными. В большинстве систем это включает пробел, табуляцию, перевод строки, возврат каретки, прогон страницы и вертикальную табуляцию.6667## 7.1.2. Пользовательское форматирование строк6869Новое в версии 2.6.7071The built-in str and unicode classes provide the ability to do complex variable substitutions and value formatting via the [`str.format()`](https://python-all.ru/2.7/library/stdtypes.html#str.format) method described in [**PEP 3101**](https://python-all.ru/2.7/library/string.html). The [`Formatter`](https://python-all.ru/2.7/library/string.html#string.Formatter) class in the [`string`](https://python-all.ru/2.7/library/string.html#module-string) module allows you to create and customize your own string formatting behaviors using the same implementation as the built-in [`format()`](https://python-all.ru/2.7/library/stdtypes.html#str.format) method.7273#### `class string.Formatter`7475Класс [`Formatter`](https://python-all.ru/2.7/library/string.html#string.Formatter) имеет следующие открытые методы:7677#### `format(format_string, *args, **kwargs)`7879Основной метод API. Принимает строку форматирования и произвольный набор позиционных и именованных аргументов. Это просто обёртка, вызывающая [`vformat()`](https://python-all.ru/2.7/library/string.html#string.Formatter.vformat).8081#### `vformat(format_string, args, kwargs)`8283Эта функция выполняет фактическую работу по форматированию. Она представлена как отдельная функция на случай, если нужно передать предопределённый словарь аргументов, вместо распаковки и повторной упаковки словаря в отдельные аргументы с помощью синтаксиса `*args` и `**kwargs`. [`vformat()`](https://python-all.ru/2.7/library/string.html#string.Formatter.vformat) выполняет разбивку строки форматирования на символьные данные и поля замены. Затем вызываются различные методы, описанные ниже.8485Кроме того, [`Formatter`](https://python-all.ru/2.7/library/string.html#string.Formatter) определяет ряд методов, предназначенных для переопределения в подклассах:8687#### `parse(format_string)`8889Перебирает format\_string и возвращает итерируемый объект кортежей (*literal\_text*, *field\_name*, *format\_spec*, *conversion*). Используется в [`vformat()`](https://python-all.ru/2.7/library/string.html#string.Formatter.vformat) для разбивки строки на буквальный текст или поля замены.9091Значения в кортеже концептуально представляют собой фрагмент литерального текста, за которым следует одно поле подстановки. Если литерального текста нет (что может произойти, когда два поля подстановки идут подряд), то *literal\_text* будет строкой нулевой длины. Если поля подстановки нет, то значения *field\_name*, *format\_spec* и *conversion* будут равны `None`.9293#### `get_field(field_name, args, kwargs)`9495По заданному *field\_name*, возвращённому [`parse()`](https://python-all.ru/2.7/library/string.html#string.Formatter.parse) (см. выше), преобразует его в объект для форматирования. Возвращает кортеж (obj, used\_key). По умолчанию принимает строки вида, определённого в [**PEP 3101**](https://python-all.ru/2.7/library/string.html), например, “0\[name\]” или “label.title”. *args* и *kwargs* передаются так же, как в [`vformat()`](https://python-all.ru/2.7/library/string.html#string.Formatter.vformat). Возвращаемое значение *used\_key* имеет тот же смысл, что параметр *key* у [`get_value()`](https://python-all.ru/2.7/library/string.html#string.Formatter.get_value).9697#### `get_value(key, args, kwargs)`9899Извлекает значение заданного поля. Аргумент *key* может быть целым числом или строкой. Если это целое число, оно представляет индекс позиционного аргумента в *args*; если строка – именованный аргумент в *kwargs*.100101Параметр *args* устанавливается в список позиционных аргументов для [`vformat()`](https://python-all.ru/2.7/library/string.html#string.Formatter.vformat), а параметр *kwargs* – в словарь именованных аргументов.102103Для составных имён полей эти функции вызываются только для первого компонента имени поля; последующие компоненты обрабатываются через обычные операции с атрибутами и индексацией.104105Например, выражение поля «0.name» вызовет [`get_value()`](https://python-all.ru/2.7/library/string.html#string.Formatter.get_value) с аргументом *key*, равным 0. Атрибут `name` будет получен после возврата из [`get_value()`](https://python-all.ru/2.7/library/string.html#string.Formatter.get_value) вызовом встроенной функции [`getattr()`](https://python-all.ru/2.7/library/functions.html#getattr).106107Если индекс или ключевое слово ссылаются на несуществующий элемент, должно быть возбуждено исключение [`IndexError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.IndexError) или [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError).108109#### `check_unused_args(used_args, args, kwargs)`110111Реализует проверку на неиспользованные аргументы при необходимости. Аргументы этой функции – множество всех ключей аргументов, которые фактически были использованы в строке форматирования (целые числа для позиционных аргументов и строки для именованных), а также ссылка на *args* и *kwargs*, переданные в vformat. Множество неиспользованных аргументов можно вычислить по этим параметрам. Предполагается, что [`check_unused_args()`](https://python-all.ru/2.7/library/string.html#string.Formatter.check_unused_args) возбуждает исключение, если проверка не пройдена.112113#### `format_field(value, format_spec)`114115[`format_field()`](https://python-all.ru/2.7/library/string.html#string.Formatter.format_field) просто вызывает глобальную встроенную функцию [`format()`](https://python-all.ru/2.7/library/functions.html#format). Метод предоставлен, чтобы подклассы могли переопределить его.116117#### `convert_field(value, conversion)`118119Преобразует значение (возвращённое [`get_field()`](https://python-all.ru/2.7/library/string.html#string.Formatter.get_field)) с учётом типа преобразования (как в кортеже, возвращаемом методом [`parse()`](https://python-all.ru/2.7/library/string.html#string.Formatter.parse)). Версия по умолчанию понимает типы преобразования 's' (str), 'r' (repr) и 'a' (ascii).120121## 7.1.3. Синтаксис строки формата122123Метод [`str.format()`](https://python-all.ru/2.7/library/stdtypes.html#str.format) и класс [`Formatter`](https://python-all.ru/2.7/library/string.html#string.Formatter) используют одинаковый синтаксис для строк форматирования (хотя в случае [`Formatter`](https://python-all.ru/2.7/library/string.html#string.Formatter) подклассы могут определять собственный синтаксис строк форматирования).124125Строки форматирования содержат «поля замены», заключённые в фигурные скобки `{}`. Всё, что не находится в скобках, считается буквальным текстом и копируется в вывод без изменений. Если нужно включить символ скобки в буквальный текст, его можно экранировать удвоением: `{{` и `}}`.126127Грамматика поля замены выглядит следующим образом:128129> ```130>131> replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"132> field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*133> arg_name          ::=  [identifier | integer]134> attribute_name    ::=  identifier135> element_index     ::=  integer | index_string136> index_string      ::=  <any source character except "]"> +137> conversion        ::=  "r" | "s"138> format_spec       ::=  <described in the next section>139> ```140141В менее формальных терминах, поле замены может начинаться с *field\_name*, который задаёт объект, чьё значение должно быть отформатировано и вставлено в вывод вместо поля замены. За *field\_name* может опционально следовать поле *conversion*, которому предшествует восклицательный знак `'!'`, и *format\_spec*, которому предшествует двоеточие `':'`. Они задают нестандартный формат для заменяемого значения.142143См. также раздел [Мини-язык спецификации формата](https://python-all.ru/2.7/library/string.html#formatspec).144145Сам *field\_name* начинается с *arg\_name*, который является либо числом, либо ключевым словом. Если это число, оно относится к позиционному аргументу, а если ключевое слово – к именованному аргументу. Если числовые arg\_names в строке форматирования идут по порядку 0, 1, 2, …, их все можно опустить (а не только некоторые), и числа 0, 1, 2, … будут автоматически подставлены в этом порядке. Поскольку *arg\_name* не ограничен кавычками, невозможно указать произвольные ключи словаря (например, строки `'10'` или `':-]'`) внутри строки форматирования. За *arg\_name* может следовать любое количество выражений индекса или атрибута. Выражение вида `'.name'` выбирает именованный атрибут с помощью [`getattr()`](https://python-all.ru/2.7/library/functions.html#getattr), а выражение вида `'[index]'` выполняет поиск по индексу с помощью [`__getitem__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__getitem__).146147Изменено в версии 2.7: Указатели позиционных аргументов можно опускать для [`str.format()`](https://python-all.ru/2.7/library/stdtypes.html#str.format) и `unicode.format()`, так что `'{} {}'` эквивалентно `'{0} {1}'`, `u'{} {}'` эквивалентно `u'{0} {1}'`.148149Несколько простых примеров строк форматирования:150151```python152"First, thou shalt count to {0}"  # Ссылается на первый позиционный аргумент153"Bring me a {}"                   # Неявно ссылается на первый позиционный аргумент154"From {} to {}"                   # То же, что "From {0} to {1}"155"My quest is {name}"              # Ссылается на именованный аргумент 'name'156"Weight in tons {0.weight}"       # Атрибут 'weight' первого позиционного аргумента157"Units destroyed: {players[0]}"   # Первый элемент именованного аргумента 'players'.158```159160Поле *conversion* вызывает приведение типа перед форматированием. Обычно задачу форматирования значения выполняет его собственный метод `__format__()`. Однако в некоторых случаях требуется принудительно отформатировать тип как строку, переопределяя его собственное определение форматирования. Преобразовав значение в строку перед вызовом `__format__()`, можно обойти обычную логику форматирования.161162В настоящее время поддерживаются два флага преобразования: `'!s'`, который вызывает [`str()`](https://python-all.ru/2.7/library/functions.html#str) для значения, и `'!r'`, который вызывает [`repr()`](https://python-all.ru/2.7/library/functions.html#repr).163164Несколько примеров:165166```python167"Harold's a clever {0!s}"        # Сначала вызывает str() для аргумента168"Bring out the holy {name!r}"    # Сначала вызывает repr() для аргумента169```170171Поле *format\_spec* содержит спецификацию того, как должно быть представлено значение, включая такие детали, как ширина поля, выравнивание, заполнение, десятичная точность и так далее. Каждый тип значения может определять свой собственный «мини-язык форматирования» или интерпретацию *format\_spec*.172173Большинство встроенных типов поддерживают общий мини-язык форматирования, который описан в следующем разделе.174175Поле *format\_spec* также может содержать вложенные поля подстановки. Эти вложенные поля подстановки могут содержать имя поля, флаг преобразования и спецификацию формата, но более глубокая вложенность не допускается. Поля подстановки внутри format\_spec подставляются перед интерпретацией строки *format\_spec*. Это позволяет динамически задавать форматирование значения.176177Смотрите раздел [Примеры форматирования](https://python-all.ru/2.7/library/string.html#formatexamples) для примеров.178179### 7.1.3.1. Мини-язык спецификации формата180181«Спецификации формата» используются внутри полей замены, содержащихся в строке форматирования, чтобы определить, как представляются отдельные значения (см. [Синтаксис строк форматирования](https://python-all.ru/2.7/library/string.html#formatstrings)). Они также могут передаваться напрямую встроенной функции [`format()`](https://python-all.ru/2.7/library/functions.html#format). Каждый форматируемый тип может определять, как должна интерпретироваться спецификация формата.182183Большинство встроенных типов реализуют следующие параметры для спецификаций формата, хотя некоторые параметры форматирования поддерживаются только числовыми типами.184185Общее правило: пустая строка формата (`""`) даёт тот же результат, что и вызов [`str()`](https://python-all.ru/2.7/library/functions.html#str) для значения. Непустая строка формата обычно изменяет результат.186187Общий вид *стандартного спецификатора формата*:188189```190191format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]192fill        ::=  <any character>193align       ::=  "<" | ">" | "=" | "^"194sign        ::=  "+" | "-" | " "195width       ::=  integer196precision   ::=  integer197type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"198```199200Если указано допустимое значение *align*, ему может предшествовать символ *fill*, который может быть любым символом и по умолчанию равен пробелу, если не указан. Невозможно использовать литеральную фигурную скобку («`{`» или «`}`») в качестве символа *fill* при использовании метода [`str.format()`](https://python-all.ru/2.7/library/stdtypes.html#str.format). Однако можно вставить фигурную скобку с помощью вложенного поля подстановки. Это ограничение не влияет на функцию [`format()`](https://python-all.ru/2.7/library/functions.html#format).201202Значение различных параметров выравнивания следующее:203204> | Параметр | Значение |205> | --- | --- |206> | `'<'` | Выравнивает поле по левому краю в пределах доступного пространства (это значение по умолчанию для большинства объектов). |207> | `'>'` | Выравнивает поле по правому краю в пределах доступного пространства (это значение по умолчанию для чисел). |208> | `'='` | Принудительно размещает отступ после знака (если он есть), но перед цифрами. Используется для вывода полей в формате ‘+000000120’. Эта опция выравнивания действительна только для числовых типов. Она становится значением по умолчанию, когда ‘0’ непосредственно предшествует ширине поля. |209> | `'^'` | Выравнивает поле по центру в пределах доступного пространства. |210211Обратите внимание, что если не задана минимальная ширина поля, ширина поля всегда будет равна размеру заполняемых данных, поэтому в этом случае параметр выравнивания не имеет смысла.212213Параметр *sign* допустим только для числовых типов и может быть одним из следующих:214215> | Параметр | Значение |216> | --- | --- |217> | `'+'` | указывает, что знак должен выводиться как для положительных, так и для отрицательных чисел. |218> | `'-'` | указывает, что знак должен выводиться только для отрицательных чисел (это поведение по умолчанию). |219> | пробел | указывает, что перед положительными числами должен ставиться пробел, а перед отрицательными – знак минус. |220221Опция `'#'` допустима только для целых чисел и только для двоичного, восьмеричного или шестнадцатеричного вывода. Если она присутствует, то указывает, что вывод будет иметь префикс `'0b'`, `'0o'` или `'0x'` соответственно.222223Параметр `','` указывает на использование запятой в качестве разделителя тысяч. Для разделителя, учитывающего локаль, используйте тип представления целых чисел `'n'`.224225Изменено в версии 2.7: Добавлена опция `','` (см. также [**PEP 378**](https://python-all.ru/2.7/library/string.html)).226227*ширина* – целое десятичное число, задающее минимальную ширину поля. Если не указано, ширина поля определяется содержимым.228229Если явное выравнивание не задано, перед полем *width* с символом ноля (`'0'`) включается знако-зависимое заполнение нулями для числовых типов. Это эквивалентно символу *fill* равному `'0'` с типом *alignment* равным `'='`.230231Параметр *precision* – десятичное число, указывающее, сколько цифр должно быть отображено после десятичной точки для значения с плавающей запятой, отформатированного с помощью `'f'` и `'F'`, или до и после десятичной точки для значения с плавающей запятой, отформатированного с помощью `'g'` или `'G'`. Для нечисловых типов этот параметр указывает максимальный размер поля – другими словами, сколько символов будет использовано из содержимого поля. Параметр *precision* не допускается для целых чисел.232233Наконец, *тип* определяет, как должны быть представлены данные.234235Доступные типы представления для строк:236237> | Тип | Значение |238> | --- | --- |239> | `'s'` | Формат строки. Это тип по умолчанию для строк и может быть опущен. |240> | None | То же, что и `'s'`. |241242Доступные типы представления для целых чисел:243244> | Тип | Значение |245> | --- | --- |246> | `'b'` | Двоичный формат. Выводит число в системе с основанием 2. |247> | `'c'` | Символ. Преобразует целое число в соответствующий символ Юникода перед выводом. |248> | `'d'` | Десятичное целое. Выводит число в системе с основанием 10. |249> | `'o'` | Восьмеричный формат. Выводит число в системе с основанием 8. |250> | `'x'` | Шестнадцатеричный формат. Выводит число по основанию 16, используя строчные буквы для цифр больше 9. |251> | `'X'` | Шестнадцатеричный формат. Выводит число по основанию 16, используя заглавные буквы для цифр больше 9. |252> | `'n'` | Число. То же, что и `'d'`, за исключением того, что для вставки соответствующих разделителей групп разрядов используется текущая локаль. |253> | None | То же, что и `'d'`. |254255В дополнение к указанным выше типам представления целые числа можно форматировать с помощью типов представления чисел с плавающей запятой, перечисленных ниже (кроме `'n'` и `None`). В этом случае для преобразования целого числа в число с плавающей запятой перед форматированием используется [`float()`](https://python-all.ru/2.7/library/functions.html#float).256257Доступные типы представления для чисел с плавающей запятой и десятичных чисел:258259> | Тип | Значение |260> | --- | --- |261> | `'e'` | Экспоненциальная запись. Выводит число в научной нотации, используя букву 'e' для обозначения показателя степени. Точность по умолчанию – `6`. |262> | `'E'` | Экспоненциальная запись. То же, что и `'e'`, за исключением того, что в качестве разделителя используется прописная буква 'E'. |263> | `'f'` | Запись с фиксированной точкой. Отображает число как число с фиксированной точкой. Точность по умолчанию – `6`. |264> | `'F'` | Нотация с фиксированной точкой. То же, что и `'f'`. |265> | `'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`. |266> | `'G'` | Общий формат. То же, что и `'g'`, за исключением того, что переключается на `'E'`, если число становится слишком большим. Представления бесконечности и NaN также переводятся в верхний регистр. |267> | `'n'` | Число. То же, что и `'g'`, за исключением того, что для вставки соответствующих разделителей групп разрядов используется текущая локаль. |268> | `'%'` | Проценты. Умножает число на 100 и выводит в фиксированном формате (`'f'`) с последующим знаком процента. |269> | None | То же, что и `'g'`. |270271### 7.1.3.2. Примеры форматирования272273Этот раздел содержит примеры синтаксиса [`str.format()`](https://python-all.ru/2.7/library/stdtypes.html#str.format) и сравнение со старым форматированием `%`.274275В большинстве случаев синтаксис похож на старое форматирование `%`, с добавлением `{}` и использованием `:` вместо `%`. Например, `'%03.2f'` можно преобразовать в `'{:03.2f}'`.276277Новый синтаксис форматирования также поддерживает новые и другие параметры, показанные в следующих примерах.278279Доступ к аргументам по позиции:280281```python282>>> '{0}, {1}, {2}'.format('a', 'b', 'c')283'a, b, c'284>>> '{}, {}, {}'.format('a', 'b', 'c')  # только для 2.7+285'a, b, c'286>>> '{2}, {1}, {0}'.format('a', 'b', 'c')287'c, b, a'288>>> '{2}, {1}, {0}'.format(*'abc')      # Распаковка последовательности аргументов289'c, b, a'290>>> '{0}{1}{0}'.format('abra', 'cad')   # индексы аргументов могут повторяться291'abracadabra'292```293294Доступ к аргументам по имени:295296```python297>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')298'Coordinates: 37.24N, -115.81W'299>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}300>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)301'Coordinates: 37.24N, -115.81W'302```303304Доступ к атрибутам аргументов:305306```python307>>> c = 3-5j308>>> ('The complex number {0} is formed from the real part {0.real} '309...  'and the imaginary part {0.imag}.').format(c)310'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'311>>> class Point(object):312...     def __init__(self, x, y):313...         self.x, self.y = x, y314...     def __str__(self):315...         return 'Point({self.x}, {self.y})'.format(self=self)316...317>>> str(Point(4, 2))318'Point(4, 2)'319```320321Доступ к элементам аргументов:322323```python324>>> coord = (3, 5)325>>> 'X: {0[0]};  Y: {0[1]}'.format(coord)326'X: 3;  Y: 5'327```328329Замена `%s` и `%r`:330331```python332>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')333"repr() shows quotes: 'test1'; str() doesn't: test2"334```335336Выравнивание текста и указание ширины:337338```python339>>> '{:<30}'.format('left aligned')340'left aligned                  '341>>> '{:>30}'.format('right aligned')342'                 right aligned'343>>> '{:^30}'.format('centered')344'           centered           '345>>> '{:*^30}'.format('centered')  # использовать '*' в качестве символа заполнения346'***********centered***********'347```348349Замена `%+f`, `%-f` и `% f` и указание знака:350351```python352>>> '{:+f}; {:+f}'.format(3.14, -3.14)  # отображать всегда353'+3.140000; -3.140000'354>>> '{: f}; {: f}'.format(3.14, -3.14)  # для положительных чисел отображать пробел355' 3.140000; -3.140000'356>>> '{:-f}; {:-f}'.format(3.14, -3.14)  # отображать только минус – то же, что и '{:f}; {:f}'357'3.140000; -3.140000'358```359360Замена `%x` и `%o` и преобразование значения в разные системы счисления:361362```python363>>> # format также поддерживает двоичные числа364>>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)365'int: 42;  hex: 2a;  oct: 52;  bin: 101010'366>>> # с префиксом 0x, 0o или 0b:367>>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)368'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'369```370371Использование запятой в качестве разделителя тысяч:372373```python374>>> '{:,}'.format(1234567890)375'1,234,567,890'376```377378Выражение процентов:379380```python381>>> points = 19.5382>>> total = 22383>>> 'Correct answers: {:.2%}'.format(points/total)384'Correct answers: 88.64%'385```386387Использование форматирования с учётом типа:388389```python390>>> import datetime391>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)392>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)393'2010-07-04 12:15:58'394```395396Вложенные аргументы и более сложные примеры:397398```python399>>> for align, text in zip('<^>', ['left', 'center', 'right']):400...     '{0:{fill}{align}16}'.format(text, fill=align, align=align)401...402'left<<<<<<<<<<<<'403'^^^^^center^^^^^'404'>>>>>>>>>>>right'405>>>406>>> octets = [192, 168, 0, 1]407>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)408'C0A80001'409>>> int(_, 16)4103232235521411>>>412>>> width = 5413>>> for num in range(5,12):414...     for base in 'dXob':415...         print '{0:{width}{base}}'.format(num, base=base, width=width),416...     print417...418    5     5     5   101419    6     6     6   110420    7     7     7   111421    8     8    10  1000422    9     9    11  1001423   10     A    12  1010424   11     B    13  1011425```426427## 7.1.4. Шаблонные строки428429Новое в версии 2.4.430431Шаблоны предоставляют более простые подстановки строк, как описано в [**PEP 292**](https://python-all.ru/2.7/library/string.html). Вместо обычных подстановок на основе `%`, шаблоны поддерживают подстановки на основе `$`, используя следующие правила:432433- `$$` – это escape-последовательность; она заменяется на один символ `$`.434- `$identifier` задаёт заполнитель подстановки, соответствующий ключу отображения `"identifier"`. По умолчанию `"identifier"` должен представлять собой идентификатор Python. Первый символ, не являющийся частью идентификатора, после символа `$` завершает спецификацию этого заполнителя.435- `${identifier}` эквивалентно `$identifier`. Оно требуется, когда после заполнителя следуют допустимые символы идентификатора, не являющиеся частью заполнителя, например `"${noun}ification"`.436437Любое другое появление `$` в строке приведёт к вызову исключения [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError).438439Модуль [`string`](https://python-all.ru/2.7/library/string.html#module-string) предоставляет класс [`Template`](https://python-all.ru/2.7/library/string.html#string.Template), реализующий эти правила. Методы [`Template`](https://python-all.ru/2.7/library/string.html#string.Template):440441#### `class string.Template(template)`442443Конструктор принимает единственный аргумент – строку шаблона.444445#### `substitute(mapping[, **kws])`446447Выполняет подстановку в шаблоне, возвращая новую строку. *mapping* – это любой объект, подобный словарю, с ключами, соответствующими заполнителям в шаблоне. В качестве альтернативы можно указать именованные аргументы, где имена аргументов являются заполнителями. Если указаны и *mapping*, и *kws*, и есть дубликаты, то заполнители из *kws* имеют приоритет.448449#### `safe_substitute(mapping[, **kws])`450451Как [`substitute()`](https://python-all.ru/2.7/library/string.html#string.Template.substitute), за исключением того, что если заполнители отсутствуют в *mapping* и *kws*, то вместо возбуждения исключения [`KeyError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.KeyError) исходный заполнитель появится в результирующей строке без изменений. Также, в отличие от [`substitute()`](https://python-all.ru/2.7/library/string.html#string.Template.substitute), любые другие вхождения `$` просто вернут `$` вместо возбуждения [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError).452453Хотя другие исключения всё ещё могут возникать, этот метод называется «безопасным», потому что он всегда старается вернуть пригодную строку вместо возбуждения исключения. В другом смысле [`safe_substitute()`](https://python-all.ru/2.7/library/string.html#string.Template.safe_substitute) может быть чем угодно, кроме безопасного, поскольку он молча игнорирует некорректные шаблоны, содержащие висячие разделители, непарные скобки или плейсхолдеры, не являющиеся допустимыми идентификаторами Python.454455Экземпляры [`Template`](https://python-all.ru/2.7/library/string.html#string.Template) также предоставляют один открытый атрибут данных:456457#### `template`458459Это объект, переданный в аргумент *template* конструктора. В общем случае его не следует изменять, но доступ только для чтения не гарантируется.460461Вот пример использования Template:462463```python464>>> from string import Template465>>> s = Template('$who likes $what')466>>> s.substitute(who='tim', what='kung pao')467'tim likes kung pao'468>>> d = dict(who='tim')469>>> Template('Give $who $100').substitute(d)470Traceback (most recent call last):471...472ValueError: Invalid placeholder in string: line 1, col 11473>>> Template('$who likes $what').substitute(d)474Traceback (most recent call last):475...476KeyError: 'what'477>>> Template('$who likes $what').safe_substitute(d)478'tim likes $what'479```480481Расширенное использование: можно создать подклассы [`Template`](https://python-all.ru/2.7/library/string.html#string.Template), чтобы настроить синтаксис заполнителя, символ-разделитель или всё регулярное выражение, используемое для разбора шаблонных строк. Для этого можно переопределить следующие атрибуты класса:482483- *разделитель* – это литеральная строка, описывающая разделитель, предваряющий заполнитель. Значение по умолчанию – `$`. Обратите внимание, что это *не* должно быть регулярным выражением, так как реализация при необходимости вызовет [`re.escape()`](https://python-all.ru/2.7/library/re.html#re.escape) для этой строки.484- *idpattern* – это регулярное выражение, описывающее шаблон для заполнителей без фигурных скобок (скобки будут добавлены автоматически по мере необходимости). Значением по умолчанию является регулярное выражение `[_a-z][_a-z0-9]*`.485486В качестве альтернативы можно указать всё регулярное выражение, переопределив атрибут класса *pattern*. Если это сделать, значение должно быть объектом регулярного выражения с четырьмя именованными захватывающими группами. Эти группы соответствуют правилам, приведённым выше, а также правилу недопустимых плейсхолдеров:487488- *escaped* – эта группа соответствует управляющей последовательности, например `$$`, в шаблоне по умолчанию.489- *named* – эта группа соответствует имени плейсхолдера без скобок; она не должна включать разделитель в захватывающую группу.490- *braced* – эта группа соответствует имени плейсхолдера, заключённого в скобки; она не должна включать ни разделитель, ни скобки в захватывающую группу.491- *invalid* – эта группа соответствует любому другому шаблону разделителя (обычно одиночному разделителю), и она должна появляться последней в регулярном выражении.492493## 7.1.5. Строковые функции494495Следующие функции предназначены для работы со строками и объектами Unicode. Они не являются методами строк.496497#### `string.capwords(s[, sep])`498499Разбивает аргумент на слова, используя [`str.split()`](https://python-all.ru/2.7/library/stdtypes.html#str.split), делает заглавной первую букву каждого слова с помощью [`str.capitalize()`](https://python-all.ru/2.7/library/stdtypes.html#str.capitalize) и объединяет слова, начинающиеся с заглавной буквы, используя [`str.join()`](https://python-all.ru/2.7/library/stdtypes.html#str.join). Если необязательный второй аргумент *sep* отсутствует или равен `None`, последовательности пробельных символов заменяются одним пробелом, а начальные и конечные пробелы удаляются; в противном случае *sep* используется для разбиения и объединения слов.500501#### `string.maketrans(from, to)`502503Возвращает таблицу перекодировки, подходящую для передачи в [`translate()`](https://python-all.ru/2.7/library/string.html#string.translate), которая будет сопоставлять каждый символ из *from* символу в той же позиции в *to*; *from* и *to* должны быть одинаковой длины.504505> **Примечание**506>507> Не используйте строки, полученные из [`lowercase`](https://python-all.ru/2.7/library/string.html#string.lowercase) и [`uppercase`](https://python-all.ru/2.7/library/string.html#string.uppercase), в качестве аргументов; в некоторых локалях они имеют разную длину. Для преобразования регистра всегда используйте [`str.lower()`](https://python-all.ru/2.7/library/stdtypes.html#str.lower) и [`str.upper()`](https://python-all.ru/2.7/library/stdtypes.html#str.upper).508509## 7.1.6. Устаревшие строковые функции510511Следующие функции также определены как методы строк и объектов Unicode; дополнительную информацию о них можно найти в разделе [Строковые методы](https://python-all.ru/2.7/library/stdtypes.html#string-methods). Эти функции следует считать устаревшими, хотя они не будут удалены до Python 3. В этом модуле определены следующие функции:512513#### `string.atof(s)`514515Устарело с версии 2.0: Используйте встроенную функцию [`float()`](https://python-all.ru/2.7/library/functions.html#float).516517Преобразует строку в число с плавающей запятой. Строка должна соответствовать стандартному синтаксису литерала числа с плавающей запятой в Python, с возможным знаком перед числом (`+` или `-`). Обратите внимание, что это поведение идентично поведению встроенной функции [`float()`](https://python-all.ru/2.7/library/functions.html#float) при передаче строки.518519> **Примечание**520>521> При передаче строки могут возвращаться значения NaN и Infinity в зависимости от используемой библиотеки C. Конкретный набор строк, принимаемых для возврата этих значений, полностью зависит от библиотеки C и, как известно, может различаться.522523#### `string.atoi(s[, base])`524525Устарело с версии 2.0: Используйте встроенную функцию [`int()`](https://python-all.ru/2.7/library/functions.html#int).526527Преобразует строку *s* в целое число с указанным *base*. Строка должна состоять из одной или нескольких цифр, с возможным знаком перед числом (`+` или `-`). Параметр *base* по умолчанию равен 10. Если он равен 0, базовое основание выбирается по умолчанию в зависимости от начальных символов строки (после удаления знака): `0x` или `0X` означает 16, `0` означает 8, всё остальное – 10. Если *base* равно 16, то начальные `0x` или `0X` всегда допускаются, хотя и не требуются. Это поведение идентично поведению встроенной функции [`int()`](https://python-all.ru/2.7/library/functions.html#int) при передаче строки. (Также обратите внимание: для более гибкой интерпретации числовых литералов используйте встроенную функцию [`eval()`](https://python-all.ru/2.7/library/functions.html#eval).)528529#### `string.atol(s[, base])`530531Устарело с версии 2.0: Используйте встроенную функцию [`long()`](https://python-all.ru/2.7/library/functions.html#long).532533Преобразует строку *s* в длинное целое (long integer) с указанным *base*. Строка должна состоять из одной или нескольких цифр, с возможным знаком перед числом (`+` или `-`). Аргумент *base* имеет то же значение, что и для [`atoi()`](https://python-all.ru/2.7/library/string.html#string.atoi). Завершающие `l` или `L` не допускаются, если только основание не равно 0. Обратите внимание, что при вызове без *base* или с *base*, установленным в 10, это поведение идентично поведению встроенной функции [`long()`](https://python-all.ru/2.7/library/functions.html#long) при передаче строки.534535#### `string.capitalize(word)`536537Возвращает копию *word*, в которой только первый символ переведён в верхний регистр.538539#### `string.expandtabs(s[, tabsize])`540541Заменяет символы табуляции в строке одним или несколькими пробелами в зависимости от текущей позиции и заданного размера табуляции. Номер столбца сбрасывается в ноль после каждого символа новой строки в строке. Эта функция не обрабатывает другие непечатаемые символы или управляющие последовательности. По умолчанию размер табуляции равен 8.542543#### `string.find(s, sub[, start[, end]])`544545Возвращает наименьший индекс в *s*, по которому найдена подстрока *sub*, при условии, что *sub* полностью содержится в `s[start:end]`. В случае отсутствия возвращает `-1`. Значения по умолчанию для *start* и *end* и интерпретация отрицательных значений такие же, как для срезов.546547#### `string.rfind(s, sub[, start[, end]])`548549Как [`find()`](https://python-all.ru/2.7/library/string.html#string.find), но находит наибольший индекс.550551#### `string.index(s, sub[, start[, end]])`552553Как [`find()`](https://python-all.ru/2.7/library/string.html#string.find), но вызывает исключение [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError), если подстрока не найдена.554555#### `string.rindex(s, sub[, start[, end]])`556557Как [`rfind()`](https://python-all.ru/2.7/library/string.html#string.rfind), но вызывает исключение [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError), если подстрока не найдена.558559#### `string.count(s, sub[, start[, end]])`560561Возвращает количество (непересекающихся) вхождений подстроки *sub* в строку `s[start:end]`. Значения по умолчанию для *start* и *end* и интерпретация отрицательных значений такие же, как для срезов.562563#### `string.lower(s)`564565Возвращает копию *s*, в которой все буквы верхнего регистра преобразованы в нижний регистр.566567#### `string.split(s[, sep[, maxsplit]])`568569Возвращает список слов из строки *s*. Если необязательный второй аргумент *sep* отсутствует или равен `None`, слова разделяются произвольными строками пробельных символов (пробел, табуляция, перевод строки, возврат каретки, прогон страницы). Если второй аргумент *sep* задан и не равен `None`, он указывает строку, используемую в качестве разделителя слов. Тогда возвращаемый список будет содержать на один элемент больше, чем количество непересекающихся вхождений разделителя в строке. Если задан *maxsplit*, выполняется не более *maxsplit* разбиений, и оставшаяся часть строки возвращается как последний элемент списка (таким образом, список будет содержать не более `maxsplit+1` элементов). Если *maxsplit* не указан или равен `-1`, то количество разбиений не ограничено (выполняются все возможные разбиения).570571Поведение split для пустой строки зависит от значения *sep*. Если *sep* не указан или указан как `None`, результатом будет пустой список. Если *sep* указан как любая строка, результатом будет список, содержащий один элемент – пустую строку.572573#### `string.rsplit(s[, sep[, maxsplit]])`574575Возвращает список слов из строки *s*, просматривая *s* с конца. По существу, результирующий список слов совпадает с возвращаемым [`split()`](https://python-all.ru/2.7/library/string.html#string.split), за исключением случая, когда явно указан необязательный третий аргумент *maxsplit* и он не равен нулю. Если задан *maxsplit*, выполняется не более *maxsplit* разбиений – *самых правых*, а оставшаяся часть строки возвращается как первый элемент списка (таким образом, список будет содержать не более `maxsplit+1` элементов).576577Новое в версии 2.4.578579#### `string.splitfields(s[, sep[, maxsplit]])`580581Эта функция ведет себя так же, как [`split()`](https://python-all.ru/2.7/library/string.html#string.split). (В прошлом [`split()`](https://python-all.ru/2.7/library/string.html#string.split) использовалась только с одним аргументом, а [`splitfields()`](https://python-all.ru/2.7/library/string.html#string.splitfields) – только с двумя.)582583#### `string.join(words[, sep])`584585Объединяет список или кортеж слов, вставляя между ними *sep*. Значение по умолчанию для *sep* – один пробел. Всегда верно, что `string.join(string.split(s, sep), sep)` равно *s*.586587#### `string.joinfields(words[, sep])`588589Эта функция ведет себя так же, как [`join()`](https://python-all.ru/2.7/library/string.html#string.join). (В прошлом [`join()`](https://python-all.ru/2.7/library/string.html#string.join) использовалась только с одним аргументом, а [`joinfields()`](https://python-all.ru/2.7/library/string.html#string.joinfields) – только с двумя.) Обратите внимание, что у строковых объектов нет метода [`joinfields()`](https://python-all.ru/2.7/library/string.html#string.joinfields); вместо него используйте метод [`join()`](https://python-all.ru/2.7/library/string.html#string.join).590591#### `string.lstrip(s[, chars])`592593Возвращает копию строки с удалёнными начальными символами. Если *chars* опущен или равен `None`, удаляются пробельные символы. Если задан и не равен `None`, *chars* должна быть строкой; символы из этой строки будут удалены с начала строки, к которой применяется метод.594595Изменено в версии 2.2.3: Добавлен параметр *chars*. В более ранних версиях 2.2 параметр *chars* передать было нельзя.596597#### `string.rstrip(s[, chars])`598599Возвращает копию строки с удалёнными конечными символами. Если *chars* опущен или равен `None`, удаляются пробельные символы. Если задан и не равен `None`, *chars* должна быть строкой; символы из этой строки будут удалены с конца строки, к которой применяется метод.600601Изменено в версии 2.2.3: Добавлен параметр *chars*. В более ранних версиях 2.2 параметр *chars* передать было нельзя.602603#### `string.strip(s[, chars])`604605Возвращает копию строки с удалёнными начальными и конечными символами. Если *chars* опущен или равен `None`, удаляются пробельные символы. Если задан и не равен `None`, *chars* должна быть строкой; символы из этой строки будут удалены с обоих концов строки, к которой применяется метод.606607Изменено в версии 2.2.3: Добавлен параметр *chars*. В более ранних версиях 2.2 параметр *chars* передать было нельзя.608609#### `string.swapcase(s)`610611Возвращает копию *s*, в которой строчные буквы преобразованы в прописные и наоборот.612613#### `string.translate(s, table[, deletechars])`614615Удаляет из *s* все символы, содержащиеся в *deletechars* (если он присутствует), а затем преобразует символы с помощью *table*, которая должна быть строкой из 256 символов, задающей преобразование для каждого значения символа по его порядковому номеру. Если *table* равна `None`, выполняется только этап удаления символов.616617#### `string.upper(s)`618619Возвращает копию *s*, в которой строчные буквы преобразованы в прописные.620621#### `string.ljust(s, width[, fillchar])`622623#### `string.rjust(s, width[, fillchar])`624625#### `string.center(s, width[, fillchar])`626627Эти функции выравнивают строку соответственно по левому краю, по правому краю и по центру в поле заданной ширины. Они возвращают строку шириной не менее *width* символов, созданную путём дополнения строки *s* символом *fillchar* (по умолчанию пробел) до указанной ширины справа, слева или с обеих сторон. Строка никогда не усекается.628629#### `string.zfill(s, width)`630631Дополняет числовую строку *s* слева нулями до достижения заданной *width*. Строки, начинающиеся со знака, обрабатываются правильно.632633#### `string.replace(s, old, new[, maxreplace])`634635Возвращает копию строки *s*, в которой все вхождения подстроки *old* заменены на *new*. Если задан необязательный аргумент *maxreplace*, заменяются первые *maxreplace* вхождений.636