Spec-Zone.ru › Python 3.10

string — Общие операции со строками

Исходный код: Lib/string.py

См. также

Тип последовательности текстовых данных — str

Методы строк

Константы строк

Константы, определённые в этом модуле:

string.ascii_letters

Объединение констант ascii_lowercase и ascii_uppercase, описанных ниже. Это значение не зависит от локали.

string.ascii_lowercase

Строчные буквы 'abcdefghijklmnopqrstuvwxyz'. Это значение не зависит от локали и не будет изменяться.

string.ascii_uppercase

Заглавные буквы 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. Это значение не зависит от локали и не будет изменяться.

string.digits

Строка '0123456789'.

string.hexdigits

Строка '0123456789abcdefABCDEF'.

string.octdigits

Строка '01234567'.

string.punctuation

Строка ASCII-символов, которые считаются знаками препинания в локали C: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.

string.printable

Строка ASCII-символов, которые считаются печатными. Это комбинация digits, ascii_letters, punctuation и whitespace.

string.whitespace

Строка, содержащая все ASCII-символы, которые считаются пробелами. Это включает символы пробела, табуляции, перевода строки, возврата каретки, разделителя страницы и вертикальной табуляции.

Настраиваемая форматирование строк

Встроенный класс строк предоставляет возможность выполнения сложных подстановок переменных и форматирования значений через метод format(), описанный в PEP 3101. Класс Formatter в модуле string позволяет создавать и настраивать собственные правила форматирования строк, используя ту же реализацию, что и встроенный метод format().

class string.Formatter

Класс Formatter имеет следующие общедоступные методы:

format(format_string, /, *args, **kwargs)

Основной метод API. Принимает строку формата и произвольный набор позиционных и именованных аргументов. Это просто обёртка, которая вызывает vformat().

Изменено в версии 3.7: Аргумент строки формата теперь является только позиционным.

vformat(format_string, args, kwargs)

Эта функция выполняет фактическую работу по форматированию. Она экспортируется как отдельная функция для случаев, когда вы хотите передать предварительно определённый словарь аргументов, а не распаковывать и упаковывать словарь как отдельные аргументы, используя синтаксис *args и **kwargs. vformat() выполняет работу по разделению строки формата на данные символов и поля замещения. Она вызывает различные методы, описанные ниже.

Кроме того, Formatter определяет ряд методов, которые предназначены для замены подклассами:

parse(format_string)

Итерируется по строке формата и возвращает итерируемый объект кортежей (literal_text, field_name, format_spec, conversion). Это используется vformat() для разбиения строки на литеральные тексты или поля замещения.

Значения в кортеже концептуально представляют собой отрезок литерального текста, за которым следует одно поле замещения. Если литерального текста нет (что может произойти, если два поля замещения следуют друг за другом), то literal_text будет строкой нулевой длины. Если поля замещения нет, то значения field_name, format_spec и conversion будут None.

get_field(field_name, args, kwargs)

Принимая field_name, возвращённое parse() (см. выше), преобразует его в объект для форматирования. Возвращает кортеж (obj, used_key). Стандартная версия принимает строки в формате, определённом в PEP 3101, такие как «0[имя]» или «метка.заглавные». args и kwargs передаются в vformat(). Возвращаемое значение used_key имеет то же значение, что и параметр key метода get_value().

get_value(key, args, kwargs)

Извлечение значения заданного поля. Аргумент key будет либо целым числом, либо строкой. Если это целое число, оно представляет индекс позиционного аргумента в args; если это строка, то она представляет именованный аргумент в kwargs.

Параметр args устанавливается в список позиционных аргументов vformat(), а параметр kwargs устанавливается в словарь именованных аргументов.

Для составных имён полей эти функции вызываются только для первого компонента имени поля; последующие компоненты обрабатываются через обычные операции атрибутов и индексирования.

Например, выражение поля «0.имя» вызовет get_value() с аргументом key равным 0. Атрибут name будет найден после того, как get_value() вернётся, вызвав встроенную функцию getattr().

Если индекс или именованный аргумент ссылается на элемент, который не существует, то должен быть вызван IndexError или KeyError.

check_unused_args(used_args, args, kwargs)

Реализация проверки неиспользованных аргументов, если это необходимо. Аргументы этой функции — множество всех ключей аргументов, фактически использованных в строке формата (целые числа для позиционных аргументов и строки для именованных аргументов), и ссылка на args и kwargs, которые были переданы в vformat. Множество неиспользованных аргументов может быть вычислено из этих параметров. check_unused_args() предполагается, что будет генерировать исключение при неудачной проверке.

format_field(value, format_spec)

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

convert_field(value, conversion)

Преобразует значение (возвращённое get_field()), учитывая тип преобразования (как в кортеже, возвращённом методом parse()). Стандартная версия понимает типы преобразования ‘s’ (str), ‘r’ (repr) и ‘a’ (ascii).

END_OF_DOCUMENT_MARKER

Синтаксис строк форматирования

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

Строки форматирования содержат «поля замены», заключённые в фигурные скобки {}. Всё, что не находится в фигурных скобках, считается литеральным текстом, который копируется без изменений в вывод. Если вам нужно включить символ фигурной скобки в литеральный текст, его можно экранировать, дублируя: {{ и }}.

Грамматика для поля замены выглядит следующим образом:

replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
arg_name          ::=  [identifier | digit+]
attribute_name    ::=  identifier
element_index     ::=  digit+ | index_string
index_string      ::=  <any source character except "]"> +
conversion        ::=  "r" | "s" | "a"
format_spec       ::=  <described in the next section>

Проще говоря, поле замены может начинаться с имени_поля, которое указывает объект, значение которого необходимо отформатировать и вставить в выходные данные вместо поля замены. Имя_поля необязательно может содержать поле преобразования, которое предваряется восклицательным знаком '!', и спецификацию_формата, которая предваряется двоеточием ':'. Они задают нестандартный формат значения замены.

См. также раздел Минимальный язык спецификаций формата.

Само имя_поля начинается с имени_аргумента, которое является либо числом, либо ключевым словом. Если это число, оно ссылается на позиционный аргумент, а если это ключевое слово, оно ссылается на именованный аргумент. Если числовые имена_аргументов в строке форматирования расположены последовательно (0, 1, 2 и т.д.), их можно опустить все (а не только некоторые), и числа 0, 1, 2 и т.д. будут автоматически вставлены в этом порядке. Поскольку имя_аргумента не заключено в кавычки, нельзя указать произвольные ключи словаря (например, строки '10' или ':-]') внутри строки форматирования. Имя_аргумента может быть дополнено любым количеством выражений индекса или атрибута. Выражение вида '.name' выбирает именованный атрибут, используя getattr(), а выражение вида '[index]' выполняет поиск по индексу, используя __getitem__().

Изменено в версии 3.1: Позиционные спецификаторы аргументов могут быть опущены для str.format(), поэтому '{} {}'.format(a, b) эквивалентно '{0} {1}'.format(a, b).

Изменено в версии 3.4: Позиционные спецификаторы аргументов могут быть опущены для Formatter.

Примеры простых строк форматирования:

"First, thou shalt count to {0}"  # References first positional argument
"Bring me a {}"                   # Implicitly references the first positional argument
"From {} to {}"                   # Same as "From {0} to {1}"
"My quest is {name}"              # References keyword argument 'name'
"Weight in tons {0.weight}"       # 'weight' attribute of first positional arg
"Units destroyed: {players[0]}"   # First element of keyword argument 'players'.

Поле преобразования вызывает преобразование типа перед форматированием. Обычно работа по форматированию значения выполняется методом __format__() самого значения. Однако в некоторых случаях желательно принудительно отформатировать тип как строку, переопределяя собственное определение форматирования. Преобразовав значение в строку перед вызовом __format__(), стандартная логика форматирования обходится.

В настоящее время поддерживаются три флага преобразования: '!s', который вызывает str() для значения, '!r', который вызывает repr(), и '!a', который вызывает ascii().

Примеры:

"Harold's a clever {0!s}"        # Calls str() on the argument first
"Bring out the holy {name!r}"    # Calls repr() on the argument first
"More {!a}"                      # Calls ascii() on the argument first

Поле спецификации_формата содержит спецификацию того, как должно быть представлено значение, включая такие детали, как ширина поля, выравнивание, заполнение, десятичная точность и т.д. Каждый тип значения может определить свой собственный «мини-язык форматирования» или интерпретацию спецификации_формата.

Большинство встроенных типов поддерживают общий минимальный язык форматирования, который описан в следующем разделе.

Поле спецификации_формата также может включать вложенные поля замены. Эти вложенные поля замены могут содержать имя поля, флаг преобразования и спецификацию формата, но более глубокое вложение не допускается. Поля замены в рамках спецификации_формата заменяются до того, как интерпретируется строка спецификации_формата. Это позволяет динамически задавать форматирование значения.

См. раздел Примеры форматирования для примеров.

Форматное спецификационное мини-язык

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

Большинство встроенных типов реализуют следующие параметры для форматных спецификаций, хотя некоторые параметры форматирования поддерживаются только числовыми типами.

Общее соглашение заключается в том, что пустая форматная спецификация дает тот же результат, что и вызов str() для значения. Непустая форматная спецификация, как правило, изменяет результат.

Общая форма стандартного спецификатора формата:

format_spec     ::=  [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill            ::=  <any character>
align           ::=  "<" | ">" | "=" | "^"
sign            ::=  "+" | "-" | " "
width           ::=  digit+
grouping_option ::=  "_" | ","
precision       ::=  digit+
type            ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

Если указано допустимое значение выравнивания, перед ним может стоять символ заполнения, который может быть любым символом и по умолчанию равен пробелу, если опущен. Невозможно использовать символ фигурной скобки (”{” или “}”) в качестве символа заполнения в форматированной строковой литерале или при использовании метода str.format(). Однако можно вставить фигурную скобку с вложенным полем замены. Это ограничение не влияет на функцию format().

Значение различных параметров выравнивания:

Параметр

Значение

'<'

Принудительно выравнивает поле влево в доступном пространстве (по умолчанию для большинства объектов).

'>'

Принудительно выравнивает поле вправо в доступном пространстве (по умолчанию для чисел).

'='

Принудительно помещает отступ после знака (если есть), но перед цифрами. Используется для вывода полей в формате '+000000120'. Этот параметр выравнивания допустим только для числовых типов. Он становится по умолчанию для чисел, когда '0' непосредственно предшествует ширине поля.

'^'

Принудительно выравнивает поле по центру в доступном пространстве.

Обратите внимание, что если не определена минимальная ширина поля, ширина поля всегда будет такой же, как и данные, которые нужно в него поместить, поэтому в этом случае параметр выравнивания не имеет значения.

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

Параметр

Значение

'+'

указывает, что знак должен использоваться как для положительных, так и для отрицательных чисел.

'-'

указывает, что знак должен использоваться только для отрицательных чисел (по умолчанию).

пробел

указывает, что для положительных чисел должен использоваться ведущий пробел, а для отрицательных — знак минус.

Параметр '#' вызывает использование «альтернативной формы» для преобразования. Альтернативная форма определяется по-разному для разных типов. Этот параметр допустим только для целочисленных, вещественных и комплексных типов. Для целых чисел, когда используется двоичное, восьмеричное или шестнадцатеричное представление, этот параметр добавляет соответствующий префикс '0b', '0o', '0x', или '0X' к значению вывода. Для вещественных и комплексных чисел альтернативная форма заставляет результат преобразования всегда содержать десятичную точку, даже если за ней нет цифр. Обычно десятичная точка появляется в результате этих преобразований только если за ней следует цифра. Кроме того, для преобразований 'g' и 'G' хвостовые нули не удаляются из результата.

Параметр ',' указывает на использование запятой в качестве разделителя тысяч. Для использования разделителя, учитывающего локаль, используйте целочисленный тип представления 'n'.

Изменено в версии 3.1: Добавлен параметр ',' (см. также PEP 378).

Параметр '_' указывает на использование подчёркивания в качестве разделителя тысяч для представления чисел с плавающей точкой и для целочисленного типа представления 'd'. Для целочисленных типов представления 'b', 'o', 'x', и 'X', подчёркивания будут вставляться каждые 4 цифры. Для других типов представления указание этого параметра является ошибкой.

Изменено в версии 3.6: Добавлен параметр '_' (см. также PEP 515).

width — десятичное целое число, определяющее минимальную общую ширину поля, включая любые префиксы, разделители и другие символы форматирования. Если не указано, то ширина поля определяется содержимым.

Когда явное выравнивание не задано, предшествующая width поле нулём ('0') позволяет знакоосознанное нулевое заполнение для числовых типов. Это эквивалентно символу fill '0' с типом alignment '='.

Изменено в версии 3.10: Предшествующее width поле '0' больше не влияет на выравнивание по умолчанию для строк.

precision — десятичное целое число, указывающее, сколько цифр должно отображаться после десятичной точки для типов представления 'f' и 'F', или до и после десятичной точки для типов представления 'g' или 'G'. Для строковых типов представления поле указывает максимальный размер поля — другими словами, сколько символов будет использовано из содержимого поля. precision не разрешен для целочисленных типов представления.

Наконец, type определяет, как должны быть представлены данные.

Доступные типы представления строк:

Тип

Значение

's'

Формат строки. Это тип по умолчанию для строк и может быть опущен.

None

То же, что и 's'.

Доступные целочисленные типы представления:

Тип

Значение

'b'

Двоичный формат. Выводит число в системе счисления с основанием 2.

'c'

Символ. Преобразует целое число в соответствующий символ Юникода перед выводом.

'd'

Десятичное целое число. Выводит число в системе счисления с основанием 10.

'o'

Восьмеричный формат. Выводит число в системе счисления с основанием 8.

'x'

Шестнадцатеричный формат. Выводит число в системе счисления с основанием 16, используя строчные буквы для цифр, больших 9.

'X'

Шестнадцатеричный формат. Выводит число в системе счисления с основанием 16, используя прописные буквы для цифр, больших 9. В случае, если указан '#', префикс '0x' также будет преобразован в '0X'.

'n'

Число. Это то же, что и 'd', за исключением того, что для вставки соответствующих разделителей чисел используется текущая настройка локали.

None

То же, что и 'd'.

Помимо вышеперечисленных типов представления, целые числа могут быть отформатированы с использованием типов представления чисел с плавающей точкой, перечисленных ниже (за исключением 'n' и None). При этом используется float() для преобразования целого числа в число с плавающей точкой перед форматированием.

Доступные типы представления для значений float и Decimal:

Тип

Значение

'e'

Научная запись. Для заданной точности p, число форматируется в научной записи с буквой ‘e’, разделяющей коэффициент и показатель степени. Коэффициент имеет одну цифру перед и p цифры после десятичной точки, всего p + 1 значащих цифр. Без указания точности используется точность 6 цифр после десятичной точки для float, и показываются все цифры коэффициента для Decimal. Если цифры после десятичной точки отсутствуют, десятичная точка также удаляется, если не используется опция #.

'E'

Научная запись. Аналогично 'e', за исключением того, что в качестве разделителя используется заглавная буква ‘E’.

'f'

Формат с фиксированной точкой. Для заданной точности p, число форматируется как десятичное число с ровно p цифрами после десятичной точки. Без указания точности используется точность 6 цифр после десятичной точки для float, и используется точность, достаточная для отображения всех цифр коэффициента для Decimal. Если цифры после десятичной точки отсутствуют, десятичная точка также удаляется, если не используется опция #.

'F'

Формат с фиксированной точкой. Аналогично 'f', но преобразует nan в NAN и inf в INF.

'g'

Общий формат. Для заданной точности p >= 1, число округляется до p значащих цифр, а затем форматируется в формате с фиксированной точкой или в научной записи в зависимости от его величины. Точность 0 обрабатывается как эквивалентная точности 1.

Точные правила следующие: предположим, что результат, отформатированный с типом представления 'e' и точностью p-1, будет иметь показатель степени exp. Затем, если m <= exp < p, где m равно -4 для чисел с плавающей запятой и -6 для Decimals, число форматируется с типом представления 'f' и точностью p-1-exp. В противном случае число форматируется с типом представления 'e' и точностью p-1. В обоих случаях несущественные завершающие нули удаляются из значащей части, а десятичная точка также удаляется, если нет оставшихся цифр после нее, если не используется опция '#'.

Без указания точности используется точность 6 значащих цифр для float. Для Decimal коэффициент результата формируется из цифр коэффициента значения; научная запись используется для значений, меньших 1e-6 по абсолютному значению и значений, где разряд наименее значимой цифры больше 1, и формат с фиксированной точкой используется в противном случае.

Положительная и отрицательная бесконечность, положительный и отрицательный ноль, и NaN форматируются как inf, -inf, 0, -0 и nan соответственно, независимо от точности.

'G'

Общий формат. Аналогично 'g' за исключением переключения на 'E', если число становится слишком большим. Представления бесконечности и NaN также приводятся в верхнем регистре.

'n'

Число. Это то же самое, что и 'g', за исключением того, что для вставки соответствующих разделителей чисел используется текущая локаль.

'%'

Процент. Умножает число на 100 и отображает в формате с фиксированной ('f') точкой, за которым следует знак процента.

None

Для float это то же самое, что и 'g', за исключением того, что при использовании формата с фиксированной точкой для форматирования результата он всегда включает по крайней мере одну цифру после десятичной точки. Использованная точность настолько велика, насколько необходимо для точного представления данного значения.

Для Decimal это то же самое, что и либо 'g', либо 'G' в зависимости от значения context.capitals для текущего десятичного контекста.

Общий эффект заключается в соответствии с выводом str(), изменённым другими модификаторами формата.

Примеры форматирования

Этот раздел содержит примеры синтаксиса str.format() и сравнения со старым %-форматированием.

В большинстве случаев синтаксис аналогичен старому %-форматированию с добавлением {} и использованием : вместо %. Например, '%03.2f' может быть переведено в '{:03.2f}'.

Новый синтаксис форматирования также поддерживает новые и отличные опции, показанные в следующих примерах.

Доступ к аргументам по позиции:

>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c')  # 3.1+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc')      # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad')   # arguments' indices can be repeated
'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'

Доступ к атрибутам аргументов:

>>> c = 3-5j
>>> ('The complex number {0} is formed from the real part {0.real} '
...  'and the imaginary part {0.imag}.').format(c)
'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
>>> class Point:
...     def __init__(self, x, y):
...         self.x, self.y = x, y
...     def __str__(self):
...         return 'Point({self.x}, {self.y})'.format(self=self)
...
>>> str(Point(4, 2))
'Point(4, 2)'

Доступ к элементам аргументов:

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

Замена %s и %r:

>>> "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, и % f и указание знака:

>>> '{:+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'

Замена %x и %o и преобразование значения в разные системы счисления:

>>> # 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'

Использование запятой в качестве разделителя тысяч:

>>> '{:,}'.format(1234567890)
'1,234,567,890'

Выражение процента:

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

Использование форматирования, специфичного для типа:

>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'

Вложенные аргументы и более сложные примеры:

>>> for align, text in zip('<^>', ['left', 'center', 'right']):
...     '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>
>>> octets = [192, 168, 0, 1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12): 
...     for base in 'dXob':
...         print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
...     print()
...
    5     5     5   101
    6     6     6   110
    7     7     7   111
    8     8    10  1000
    9     9    11  1001
   10     A    12  1010
   11     B    13  1011

Строки шаблонов

Строки шаблонов обеспечивают более простые подстановки строк, как описано в PEP 292. Основное применение строк шаблонов — интернационализация (i18n), так как в этом контексте более простой синтаксис и функциональность делают их более удобными для перевода, чем другие встроенные средства форматирования строк в Python. В качестве примера библиотеки, построенной на строках шаблонов для i18n, см. пакет flufl.i18n.

Строки шаблонов поддерживают подстановки, основанные на $, используя следующие правила:

  • $$ — это escape; он заменяется одним $.
  • $identifier указывает на заполнитель подстановки, соответствующий ключу отображения "identifier". По умолчанию "identifier" ограничен любой строкой ASCII-буквенно-цифровых символов (включая подчеркивания), начинающейся с подчеркивания или ASCII-буквы. Первый символ, не являющийся идентификатором, после символа $ завершает указание этого заполнителя.
  • ${identifier} эквивалентно $identifier. Оно необходимо, когда заполнитель следует за допустимыми символами идентификатора, но не является частью заполнителя, например, "${noun}ification".

Любое другое появление $ в строке приведет к возбуждению исключения ValueError.

Модуль string предоставляет класс Template, который реализует эти правила. Методы класса Template:

class string.Template(template)

Конструктор принимает единственный аргумент — строку шаблона.

substitute(mapping={}, /, **kwds)

Выполняет подстановку шаблона, возвращая новую строку. mapping — это любой объект, похожий на словарь, с ключами, соответствующими заполнителям в шаблоне. В качестве альтернативы вы можете предоставить именованные аргументы, где имена — это заполнители. Если заданы и mapping, и kwds, и есть дубликаты, заполнители из kwds имеют приоритет.

safe_substitute(mapping={}, /, **kwds)

Подобно substitute(), за исключением того, что если заполнители отсутствуют в mapping и kwds, вместо возбуждения исключения KeyError исходный заполнитель отобразится в результирующей строке без изменений. Также, в отличие от substitute(), любые другие появления $ просто вернут $ вместо возбуждения исключения ValueError.

Хотя другие исключения могут возникнуть, этот метод называется «безопасным», потому что всегда пытается вернуть используемую строку вместо возбуждения исключения. В другом смысле safe_substitute() может быть чем угодно, кроме безопасного, так как он будет молча игнорировать неправильно сформированные шаблоны, содержащие висящие разделители, несоответствующие фигурные скобки или заполнители, которые не являются допустимыми идентификаторами Python.

Экземпляры Template также предоставляют одно общедоступное свойство:

template

Это объект, переданный в аргумент template конструктора. В общем случае его не следует изменять, но доступ для чтения только для чтения не обеспечивается.

Вот пример использования шаблона:

>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
>>> d = dict(who='tim')
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
...
ValueError: Invalid placeholder in string: line 1, col 11
>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
...
KeyError: 'what'
>>> Template('$who likes $what').safe_substitute(d)
'tim likes $what'

Расширенное использование: вы можете создавать подклассы Template для настройки синтаксиса заполнителей, символа разделителя или всего регулярного выражения, используемого для анализа строк шаблонов. Для этого можно переопределить следующие свойства класса:

  • delimiter — это литеральная строка, описывающая разделитель, вводящий заполнитель. Значение по умолчанию — $. Обратите внимание, что это не должно быть регулярное выражение, так как реализация будет вызывать re.escape() для этой строки по мере необходимости. Кроме того, вы не можете изменить разделитель после создания класса (то есть, другой разделитель должен быть установлен в пространстве имен подкласса).
  • idpattern — это регулярное выражение, описывающее шаблон для заполнителей без фигурных скобок. Значение по умолчанию — регулярное выражение (?a:[_a-z][_a-z0-9]*). Если оно задано, и braceidpattern равно None, этот шаблон также будет применяться к заполнителям в фигурных скобках.

    Примечание

    Поскольку значение по умолчанию flags равно re.IGNORECASE, шаблон [a-z] может соответствовать некоторым не-ASCII символам. Вот почему здесь используется локальный флаг a.

    Изменено в версии 3.7: braceidpattern может использоваться для определения отдельных шаблонов, используемых внутри и вне фигурных скобок.

  • braceidpattern — это то же, что и idpattern, но описывает шаблон для заполнителей в фигурных скобках. По умолчанию None, что означает использование того же шаблона (внутри и вне фигурных скобок).

    Добавлен в версии 3.7.

  • flags — флаги регулярных выражений, которые будут применяться при компиляции регулярного выражения для распознавания подстановок. Значение по умолчанию re.IGNORECASE. Обратите внимание, что re.VERBOSE всегда добавляется к флагам, поэтому пользовательские idpattern должны следовать соглашениям для подробных регулярных выражений.

    Добавлен в версии 3.2.

В качестве альтернативы вы можете указать всё регулярное выражение, переопределяя свойство класса pattern. Если вы это делаете, значение должно быть объектом регулярного выражения с четырьмя именованными группами захвата. Группы захвата соответствуют правилам, приведенным выше, а также правилу недопустимого заполнителя:

  • escaped — эта группа соответствует последовательности escape, например, $$, в шаблоне по умолчанию.
  • named — эта группа соответствует имени заполнителя без фигурных скобок; она не должна включать разделитель в группе захвата.
  • braced — эта группа соответствует имени заполнителя в фигурных скобках; она не должна включать ни разделитель, ни фигурные скобки в группе захвата.
  • invalid — эта группа соответствует любому другому шаблону разделителей (обычно одиночному разделителю), и она должна стоять последней в регулярном выражении.

Вспомогательные функции

string.capwords(s, sep=None)

Разделяет аргумент на слова, используя str.split(), приводит каждое слово в верхний регистр, используя str.capitalize(), и объединяет слова в верхнем регистре, используя str.join(). Если необязательный второй аргумент sep отсутствует или None, последовательности пробельных символов заменяются одним пробелом, а начальные и конечные пробелы удаляются, в противном случае используется sep для разделения и объединения слов.

© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/library/string.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API