Spec-Zone.ru › Python 3.11

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() (см. выше), в объект для форматирования. Возвращает кортеж (obj, used_key).

get_value(key, args, kwargs)

Получает значение заданного поля.

check_unused_args(used_args, args, kwargs)

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

format_field(value, format_spec)

Просто вызывает встроенную глобальную функцию format().

convert_field(value, conversion)

Преобразует значение (возвращаемое get_field()) с учётом типа преобразования (как в кортеже, возвращаемом методом parse()).

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

Метод 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>

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

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

Само имя_поля начинается с имени_аргумента, которое может быть числом или ключевым словом. Если это число, оно ссылается на позиционный аргумент, а если это ключевое слово, оно ссылается на именованный ключевой аргумент. Имя_аргумента рассматривается как число, если вызов 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'. Этот параметр выравнивания допустим только для числовых типов. Он становится значением по умолчанию для чисел, когда '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') включает в себя знак-зависимый нулевой отступ для числовых типов. Это эквивалентно символу заполнения '0' с типом выравнивания '='.

Изменено в версии 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.

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–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/string.html

Spec-Zone.ru

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