Spec-Zone.ru › Python 3.13

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() для разбиения строки на текстовые элементы или поля замены.

get_field(field_name, args, kwargs)

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

get_value(key, args, kwargs)

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

check_unused_args(used_args, args, kwargs)

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

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       ::=  format-spec:format_spec

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

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

Само имя_поля начинается с имени_аргумента, которое является либо числом, либо ключевым словом. Если это число, оно относится к позиционному аргументу, а если ключевое слово, то к именованному аргументу. Имя_аргумента обрабатывается как число, если вызов str.isdecimal() над строкой вернёт значение true. Если числовые имена аргументов в строке форматирования расположены последовательно (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

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

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

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

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

Язык форматирования

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

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

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

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

format_spec     ::=  [[fill]align][sign]["z"]["#"]["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». Этот параметр выравнивания действителен только для числовых типов, за исключением complex. Он становится значением по умолчанию для чисел, когда «0» непосредственно предшествует ширине поля.

'^'

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

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

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

Параметр

Значение

'+'

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

'-'

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

пробел

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

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

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

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

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

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

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

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

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

Если явно не задано выравнивание, предшествующий значению width символ «ноль» ('0') активирует знак-ориентированное нулевое заполнение для числовых типов, за исключением complex. Это эквивалентно символу заполнения «'0'» с типом выравнивания «'='».

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

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

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

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

Тип

Значение

's'

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

None

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

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

Тип

Значение

'b'

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

'c'

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

'd'

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

'o'

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

'x'

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

'X'

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

'n'

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

None

То же самое, что и 'd'.

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

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

Тип

Значение

'e'

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

'E'

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

'f'

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

'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', за исключением того, что при использовании формата с фиксированной точкой для форматирования результата всегда включается по крайней мере одна цифра после десятичной точки и происходит переключение на научную запись, когда exp >= p - 1. Когда точность не указана, последняя будет такой большой, насколько это необходимо для достоверного представления данного значения.

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

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

Результат должен быть правильно округлен до заданной точности p цифр после десятичной точки. Режим округления для float соответствует встроенному round(). Для Decimal будет использоваться режим округления текущего контекста.

Доступные типы представлений для complex такие же, как для float ('%' не разрешено). Как вещественная, так и мнимая части комплексного числа форматируются как числа с плавающей запятой в соответствии с указанным типом представления. Они разделяются обязательным знаком мнимой части, последняя завершается постфиксом j . Если тип представления отсутствует, результат будет соответствовать выводу 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.

is_valid()

Возвращает false, если шаблон имеет недопустимые заполнители, которые заставят substitute() поднять ValueError.

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

get_identifiers()

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

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

Экземпляры 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, что означает использование idpattern (т. е. используется один и тот же шаблон как внутри, так и вне фигурных скобок). Если задано, это позволяет определить разные шаблоны для заполнителей в фигурных скобках и без них.

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

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

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

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

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

Методы этого класса поднимут ValueError, если шаблон соответствует шаблону без совпадения одной из этих именованных групп.

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

string.capwords(s, sep=None)

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

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

Spec-Zone.ru

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