Библиотека string в Python: работа со строками и шаблонами

Раздел: Стандартная библиотека Python -> Строки

Работа со строками с помощью модуля string

Как безопасно подставлять значения в строку, избегая уязвимостей, и управлять форматированием?

Наиболее эффективным способом является использование класса string.Template. Он подставляет значения по имени переменной, что предотвращает внедрение кода при работе с пользовательским вводом.

from string import Template

t = Template('Здравствуйте, $name! Ваш заказ №$order.')
result = t.substitute(name='Иван', order='12345')
print(result)

Python strip (метод strip в python)

Здравствуйте, Иван! Ваш заказ №12345.

Python повторить строку (повторение строки в python)

Метод substitute вызывает ошибку, если не хватает ключа. Для пропуска отсутствующих ключей используется safe_substitute.

Типичная ошибка: забыть указать $ перед именем переменной или использовать фигурные скобки для однозначного выделения имени: ${name}адрес. Если имя переменной сразу после $ граничит с буквами, шаблон может не сработать.

Как проверить, является ли символ буквой, цифрой или знаком пунктуации?

Модуль string предоставляет константы: ascii_letters, digits, punctuation. Это удобно для фильтрации или валидации строк.

import string

symbol = '@'
if symbol in string.punctuation:
    print(f'{symbol} - знак пунктуации')

Tuple в str python (преобразование кортежа в строку в python)

@ - знак пунктуации

Python объект в строку (преобразование объекта в строку в python)

Проблема: константы не учитывают локаль. Для работы с буквами кириллицы понадобится string.printable или собственные множества.

Как привести первую букву каждого слова к верхнему регистру, сохраняя остальные?

Функция string.capwords разбивает строку по пробельным символам, применяет capitalize() к каждому слову и соединяет обратно.

import string

text = 'привет мир! как дела?'
result = string.capwords(text)
print(result)

Python convert string (преобразование строк в python)

Привет Мир! Как Дела?

Python str to bytes (преобразование строки в байты в python)

Обратите внимание: функция удаляет лишние пробелы и не меняет регистр букв после первой.

Если нужно сохранить оригинальное количество пробелов или обрабатывать нестандартные разделители, capwords не подходит. Для таких случаев следует использовать регулярные выражения.

Как гибко настраивать форматирование строк с произвольными правилами?

Класс string.Formatter позволяет переопределить методы format_field, get_value и другие для создания своего синтаксиса.

from string import Formatter

class MyFormatter(Formatter):
    def format_field(self, value, format_spec):
        if format_spec == 'upper':
            return str(value).upper()
        return super().format_field(value, format_spec)

fmt = MyFormatter()
result = fmt.format('{name:upper} {age}', name='анна', age=25)
print(result)

функция разделить python (разделение строки на список в python)

АННА 25

Это полезно для реализации предметно-ориентированных языков или шаблонизаторов.

Сложность: требуется глубокое понимание механики Formatter. Ошибка в переопределённом методе может привести к неожиданным падениям.

Для большинства повседневных задач достаточно Template и констант string. Расширенные возможности Formatter используют при создании библиотек и фреймворков.

- вывести длину строки python (вывести длину строки в python)
- вывести элемент строки python (вывод конкретного символа строки по индексу в python)
- задания на строки python (задания на строки в python)

Расширенные примеры использования библиотеки string

Ниже приведены нетривиальные сценарии, демонстрирующие возможности модуля string.

Пример
# 1. Генерация случайного пароля с использованием констант
import string
import random

def generate_password(length=12):
    # Используем буквы, цифры и знаки пунктуации, но исключаем спорные символы
    chars = string.ascii_letters + string.digits + string.punctuation
    # Удаляем символы, которые легко спутать (например, '0', 'O', 'l', 'I')
    ambiguous = '0O1lI'
    chars = ''.join(c for c in chars if c not in ambiguous)
    password = ''.join(random.choice(chars) for _ in range(length))
    return password

print(generate_password(16))
jT]Zx*Y8k&:f2pcE
Пример
# 2. Использование Template с безопасной подстановкой и словарём
from string import Template

tpl = Template('$name работает в $company')
data = {'name': 'Анна', 'company': 'Python Software Foundation'}
print(tpl.substitute(data))
Анна работает в Python Software Foundation
Пример
# 3. Настраиваемый форматтер для вывода чисел
from string import Formatter

class NumberFormatter(Formatter):
    def format_field(self, value, format_spec):
        if format_spec == 'rub':
            return f'{value:.2f} ₽'
        elif format_spec == 'percent':
            return f'{value*100:.1f}%'
        return super().format_field(value, format_spec)

fmt = NumberFormatter()
print(fmt.format('Стоимость: {price:rub}, скидка: {discount:percent}', price=1234.5, discount=0.15))
Стоимость: 1234.50 ₽, скидка: 15.0%
Пример
# 4. Фильтрация строк с использованием string.whitespace
import string

def strip_all_whitespace(text):
    """Удаляем все пробельные символы, включая табуляции и переносы"""
    return ''.join(c for c in text if c not in string.whitespace)

sample = 'Привет,\tмир!\nНовая строка.'
print(strip_all_whitespace(sample))
Привет,мир!Новаястрока.
Пример
# 5. Собственный шаблон с наследованием от Template
from string import Template

class ShellTemplate(Template):
    delimiter = '%'  # меняем символ-разделитель

t = ShellTemplate('Hello %{name}, your path is %{path}')
print(t.substitute(name='root', path='/home'))
Hello root, your path is /home

Эти примеры демонстрируют гибкость модуля string: от генерации случайных наборов до создания DSL для форматирования.

Библиотека string в Python (работа со строками) - comments

En
библиотека string python (python)