string — Общие операции со строками
Исходный код: Lib/string.py
Строковые константы
В этом модуле определены следующие константы:
-
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, которые Python считает печатными. Это объединение
digits,ascii_letters,punctuationиwhitespace.Примечание
По замыслу
string.printable.isprintable()возвращаетFalse. В частности,string.printableне является печатным символом в смысле POSIX (см. LC_CTYPE).
-
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) -
Перебирает строку 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[name]” или “label.title”. args и kwargs передаются вvformat(). Возвращаемое значение used_key имеет тот же смысл, что и параметр key методаget_value().
-
get_value(key, args, kwargs) -
Получает значение указанного поля. Аргумент key может быть целым числом или строкой. Если это целое число, оно обозначает индекс позиционного аргумента в args; если строка — именованный аргумент в kwargs.
Параметр args устанавливается в список позиционных аргументов, переданных в
vformat(), а параметр kwargs — в словарь именованных аргументов.Для составных имён полей эти функции вызываются только для первого компонента имени поля; последующие компоненты обрабатываются обычными операциями доступа к атрибутам и индексирования.
Например, выражение поля ‘0.name’ приведёт к вызову
get_value()с аргументом key, равным 0. После возврата изget_value()атрибутnameбудет найден посредством вызова встроенной функции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).
-
Синтаксис форматных строк
Метод 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
В менее формальных терминах поле замены может начинаться с field_name, указывающего объект, значение которого нужно отформатировать и вставить в выходные данные вместо поля замены. После field_name может следовать поле conversion, которому предшествует восклицательный знак '!', и format_spec, которому предшествует двоеточие ':'. Они задают формат значения замены, отличный от формата по умолчанию.
См. также раздел Мини-язык спецификаций формата.
Само поле field_name начинается с arg_name, который представляет собой число или ключевое слово. Если это число, оно обозначает позиционный аргумент, а если ключевое слово — именованный ключевой аргумент. arg_name считается числом, если вызов str.isdecimal() для строки вернул бы true. Если числовые arg_names в форматной строке представлены последовательностью 0, 1, 2, …, их можно опустить все (но не только некоторые), и числа 0, 1, 2, … будут автоматически подставлены в этом порядке. Поскольку arg_name не ограничен кавычками, в форматной строке нельзя указать произвольные ключи словаря (например, строки '10' или ':-]'). После arg_name может следовать любое количество выражений индексирования или обращения к атрибутам. Выражение вида '.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'.
Поле conversion приводит тип значения перед форматированием. Обычно форматирование значения выполняет метод __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_spec содержит спецификацию способа представления значения, включая такие детали, как ширина поля, выравнивание, заполнение, точность десятичной части и так далее. Для каждого типа значения можно определить собственный «мини-язык форматирования» или собственную интерпретацию format_spec.
Большинство встроенных типов поддерживают общий мини-язык форматирования, описанный в следующем разделе.
Поле format_spec также может содержать вложенные поля замены. Эти вложенные поля замены могут включать имя поля, флаг преобразования и спецификацию формата, но более глубокая вложенность не допускается. Поля замены внутри format_spec подставляются до интерпретации строки format_spec. Это позволяет динамически задавать форматирование значения.
Примеры см. в разделе Примеры форматирования.
Мини-язык спецификаций формата
«Спецификации формата» используются в полях замены, содержащихся в форматной строке, чтобы определить способ представления отдельных значений (см. Синтаксис форматных строк и 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" | "%"
Если указано допустимое значение align, перед ним может стоять символ fill. Им может быть любой символ; если он не указан, используется пробел. В качестве символа fill нельзя использовать буквальную фигурную скобку («{» или «}») в форматированном строковом литерале или при использовании метода str.format(). Однако фигурную скобку можно вставить с помощью вложенного поля замены. Это ограничение не распространяется на функцию format().
Различные параметры выравнивания имеют следующие значения:
Параметр | Значение |
|---|---|
| Выравнивает поле по левому краю доступного пространства (по умолчанию для большинства объектов). |
| Выравнивает поле по правому краю доступного пространства (по умолчанию для чисел). |
| Размещает заполнение после знака (если он есть), но перед цифрами. Используется для вывода полей в виде «+000000120». Этот параметр выравнивания допустим только для числовых типов, кроме |
| Выравнивает поле по центру доступного пространства. |
Обратите внимание: если минимальная ширина поля не задана, ширина поля всегда будет равна размеру данных, которые его заполняют, поэтому в этом случае параметр выравнивания не имеет значения.
Параметр sign допустим только для числовых типов и может принимать одно из следующих значений:
Параметр | Значение |
|---|---|
| указывает, что знак должен выводиться как для положительных, так и для отрицательных чисел. |
| указывает, что знак должен выводиться только для отрицательных чисел (поведение по умолчанию). |
space | указывает, что перед положительными числами должен выводиться начальный пробел, а перед отрицательными — знак минус. |
Параметр 'z' преобразует отрицательные значения с плавающей точкой, равные нулю, в положительный ноль после округления до точности формата. Этот параметр допустим только для типов представления с плавающей точкой.
Изменено в версии 3.11: Добавлен параметр 'z' (см. также PEP 682).
Параметр '#' указывает, что для преобразования следует использовать «альтернативную форму». Альтернативная форма определяется по-разному для разных типов. Этот параметр допустим только для целых чисел, чисел с плавающей точкой и комплексных чисел. Для целых чисел при выводе в двоичном, восьмеричном или шестнадцатеричном формате этот параметр добавляет к выходному значению соответствующий префикс '0b', '0o', '0x' или '0X'. Для чисел с плавающей точкой и комплексных чисел альтернативная форма гарантирует, что результат преобразования всегда содержит десятичный разделитель, даже если после него нет цифр. Обычно десятичный разделитель появляется в результате этих преобразований, только если за ним следует цифра. Кроме того, при преобразованиях 'g' и 'G' конечные нули из результата не удаляются.
Параметр ',' указывает на использование запятой в качестве разделителя тысяч для типов представления с плавающей точкой и для целочисленного типа представления 'd'. Для других типов представления этот параметр приводит к ошибке. Чтобы использовать разделитель с учётом локали, вместо него выберите целочисленный тип представления 'n'.
Изменено в версии 3.1: Добавлен параметр ',' (см. также PEP 378).
Параметр '_' указывает на использование подчёркивания в качестве разделителя тысяч для типов представления с плавающей точкой и для целочисленного типа представления 'd'. Для целочисленных типов представления 'b', 'o', 'x' и 'X' подчёркивания вставляются через каждые 4 цифры. Для других типов представления указание этого параметра приводит к ошибке.
Изменено в версии 3.6: Добавлен параметр '_' (см. также PEP 515).
width — десятичное целое число, задающее минимальную общую ширину поля, включая любые префиксы, разделители и другие символы форматирования. Если значение не указано, ширина поля определяется его содержимым.
Если явное выравнивание не задано, ноль (символ '0') перед полем width включает заполнение нулями с учётом знака для числовых типов, кроме complex. Это эквивалентно символу fill '0' и типу alignment '='.
Изменено в версии 3.10: Предшествующий полю width символ '0' больше не влияет на выравнивание строк по умолчанию.
precision — десятичное целое число, указывающее, сколько цифр следует отображать после десятичного разделителя для типов представления 'f' и 'F' либо до и после десятичного разделителя для типов представления 'g' или 'G'. Для строковых типов представления это поле задаёт максимальный размер поля — другими словами, количество символов, которые будут взяты из содержимого поля. Для целочисленных типов представления указывать precision нельзя.
Наконец, type определяет способ представления данных.
Доступны следующие строковые типы представления:
Тип | Значение |
|---|---|
| Строковый формат. Это тип по умолчанию для строк; его можно опустить. |
None | То же, что |
Доступны следующие целочисленные типы представления:
Тип | Значение |
|---|---|
| Двоичный формат. Выводит число в системе счисления с основанием 2. |
| Символ. Преобразует целое число в соответствующий символ Unicode перед выводом. |
| Десятичное целое число. Выводит число в системе счисления с основанием 10. |
| Восьмеричный формат. Выводит число в системе счисления с основанием 8. |
| Шестнадцатеричный формат. Выводит число в системе счисления с основанием 16, используя строчные буквы для цифр больше 9. |
| Шестнадцатеричный формат. Выводит число в системе счисления с основанием 16, используя прописные буквы для цифр больше 9. Если указан |
| Число. То же, что |
None | То же, что |
Помимо перечисленных выше типов представления, целые числа можно форматировать с помощью перечисленных ниже типов представления с плавающей точкой (кроме 'n' и None). В этом случае для преобразования целого числа в число с плавающей точкой перед форматированием используется float().
Для значений float и Decimal доступны следующие типы представления:
Тип | Значение |
|---|---|
| Научная нотация. При заданной точности |
| Научная нотация. То же, что |
| Формат с фиксированной точкой. При заданной точности |
| Формат с фиксированной точкой. То же, что |
|
Общий формат. При заданной точности Точные правила таковы: предположим, что показатель степени числа, отформатированного с типом представления Если точность не задана, для Положительная и отрицательная бесконечность, положительный и отрицательный ноль, а также NaN форматируются соответственно как |
| Общий формат. То же, что |
| Число. То же, что |
| Процент. Умножает число на 100 и отображает его в формате с фиксированной точкой ( |
None |
Для Для В целом результат соответствует выводу |
Результат должен быть правильно округлён до заданного количества 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 конструктора. Как правило, его не следует изменять, однако доступ только для чтения не обеспечивается.
-
Пример использования 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.12/library/string.html