Python: уроки, справочник и задачи

Строковые методы Python: справочник по группам

Раздел: Строки в Python · Обновлено 31.10.2026

Методы строк в Python - это функции объекта str, которые меняют регистр, ищут и заменяют подстроки, разбивают и склеивают текст, проверяют содержимое. Здесь все методы собраны в группы по назначению, у каждой группы есть таблица и пример с результатом, а в конце разобраны частые ошибки новичков.

Строковые методы Python: справочник по группам
Фото: Willi Heidelbach / CC BY 2.5, Wikimedia Commons
Содержание статьи
  1. Общие правила работы со строковыми методами
  2. Изменение регистра
  3. Поиск и подсчет подстрок
  4. Замена, разбиение и склейка
  5. Очистка краев и выравнивание
  6. Проверки содержимого
  7. Кодирование, форматирование и замена символов
  8. Частые вопросы
    1. Почему метод не изменил строку?
    2. Чем isdigit() отличается от isnumeric() и isdecimal()?
    3. Как удалить все пробелы из строки?
    4. Как посчитать количество слов в строке?

Общие правила работы со строковыми методами

Строки в Python неизменяемые. Ни один метод не меняет исходную строку, каждый возвращает новый объект или значение другого типа: число, список, кортеж, булево значение. Поэтому результат нужно сохранить в переменную.

s = "привет"
s.upper()          # результат потерян
print(s)           # привет
s = s.upper()
print(s)           # ПРИВЕТ

Методы вызываются через точку и могут идти цепочкой: text.strip().lower().replace(" ", "_"). Полный список доступен прямо в интерпретаторе через dir(str), а описание конкретного метода выводит help(str.split).

Изменение регистра

Эти методы возвращают копию строки с другим регистром букв. Кириллица обрабатывается так же, как латиница.

МетодЧто делаетПример и результат
upper()все буквы заглавные"py".upper() → 'PY'
lower()все буквы строчные"PY".lower() → 'py'
capitalize()первая буква заглавная, остальные строчные"пРИВЕТ".capitalize() → 'Привет'
title()каждое слово с заглавной"мир труд".title() → 'Мир Труд'
swapcase()меняет регистр каждой буквы"Ab".swapcase() → 'aB'
casefold()строгий нижний регистр для сравнения"Straße".casefold() → 'strasse'

Для сравнения строк без учета регистра надежнее casefold(): он учитывает особые случаи в немецком и других языках, где lower() дает разный результат.

Поиск и подсчет подстрок

Методы поиска возвращают позицию подстроки или количество вхождений. У find(), index() и count() есть необязательные аргументы start и end, которые ограничивают область поиска.

s = "мама мыла раму"
print(s.find("ма"))        # 0, первое вхождение
print(s.rfind("ма"))       # 2, последнее вхождение
print(s.find("папа"))      # -1, не найдено
print(s.count("ма"))       # 2
print(s.startswith("мама"), s.endswith((".txt", "раму")))  # True True
print(s.index("папа"))     # ValueError: substring not found

Разница между find() и index() только в реакции на отсутствие подстроки: первый вернет -1, второй выбросит исключение. Методы startswith() и endswith() принимают кортеж вариантов, что удобно для проверки расширений файлов. Если нужна только проверка наличия, короче оператор in: "мыла" in s.

Замена, разбиение и склейка

Эта группа используется чаще всего при обработке текста и данных из файлов.

МетодРезультат
replace(old, new, count)строка с заменами, count ограничивает их число
split(sep, maxsplit)список частей, без sep делит по любым пробельным символам
rsplit(sep, maxsplit)то же, но деление идет справа
splitlines()список строк по переводам строки
partition(sep)кортеж (до, разделитель, после) по первому вхождению
rpartition(sep)то же по последнему вхождению
join(iterable)склеивает элементы через строку-разделитель
path = "docs/2024/report.final.pdf"
print(path.split("/"))           # ['docs', '2024', 'report.final.pdf']
print(path.rsplit(".", 1))       # ['docs/2024/report.final', 'pdf']
print(path.partition("/"))       # ('docs', '/', '2024/report.final.pdf')
print("-".join(["2024", "05", "01"]))  # 2024-05-01
print("a,b,a".replace("a", "x", 1))   # x,b,a

join() вызывается у разделителя, а не у списка, и принимает только строки: список чисел сначала преобразуют через map(str, nums). Подробные примеры есть в статьях про split(), join() и replace().

Очистка краев и выравнивание

Методы strip(), lstrip() и rstrip() убирают символы по краям строки, по умолчанию пробелы, табуляции и переводы строк. Аргумент задает набор символов, а не подстроку: "xxhixx".strip("x") вернет 'hi'. Чтобы убрать конкретный префикс или суффикс целиком, начиная с Python 3.9 есть removeprefix() и removesuffix().

print("  текст\n".strip())             # 'текст'
print("report.txt".removesuffix(".txt"))  # 'report'
print("42".zfill(5))                    # '00042'
print("id".ljust(6, ".") + "|")         # 'id....|'
print("id".rjust(6) + "|")              # '    id|'
print("меню".center(10, "*"))           # '***меню***'
print("a\tb".expandtabs(4))             # 'a   b'

Выравнивание через ljust(), rjust() и center() пригодится для вывода таблиц в консоль, хотя в новом коде то же самое короче записывается в f-строках: f"{name:<10}".

Проверки содержимого

Методы с префиксом is возвращают True или False. Для пустой строки все они, кроме isascii(), дают False.

МетодTrue, если
isalpha()только буквы, включая кириллицу
isdigit()только цифры, включая надстрочные вроде 2 в степени
isdecimal()только десятичные цифры 0-9 и их аналоги в других письменностях
isnumeric()любые числовые символы, в том числе дроби и римские цифры Unicode
isalnum()буквы и цифры
isspace()только пробельные символы
islower(), isupper(), istitle()соответствующий регистр
isidentifier()строка годится как имя переменной
isprintable()нет непечатаемых символов
isascii()все символы из ASCII (Python 3.7+)
print("2024".isdigit(), "-5".isdigit(), "3.14".isdigit())  # True False False
print("\u00b2".isdigit(), "\u00b2".isdecimal())              # True False
print("\u00bd".isnumeric(), "\u00bd".isdigit())              # True False

Ни один из этих методов не распознает отрицательные и дробные числа. Чтобы проверить, что строка является числом, надежнее попробовать float(s) в блоке try/except ValueError.

Кодирование, форматирование и замена символов

Оставшиеся методы преобразуют строку в другие формы. encode() возвращает байты в нужной кодировке, по умолчанию UTF-8. format() и format_map() подставляют значения в шаблон с фигурными скобками. Пара str.maketrans() и translate() заменяет или удаляет отдельные символы за один проход.

print("Я".encode())                       # b'\xd0\xaf'
print("{} + {} = {}".format(2, 3, 5))     # 2 + 3 = 5
print("{name}".format_map({"name": "Оля"}))  # Оля

table = str.maketrans("ео", "eo", "!")    # заменить е, о на латиницу, удалить !
print("пес и кот!".translate(table))       # пeс и кoт

Третий аргумент maketrans() перечисляет символы, которые нужно удалить. Это быстрее, чем несколько вызовов replace() подряд. Полное описание всех методов приведено в документации Python.

Частые вопросы

Ответы на вопросы, которые чаще всего возникают при работе со строковыми методами.

Почему метод не изменил строку?

Строки неизменяемые, методы возвращают новую строку. Присвойте результат переменной: s = s.strip().

Чем isdigit() отличается от isnumeric() и isdecimal()?

isdecimal() самый строгий и пропускает только обычные цифры. isdigit() дополнительно принимает надстрочные цифры, а isnumeric() еще и дроби вроде символа одной второй. Для проверки ввода пользователя обычно хватает isdecimal().

Как удалить все пробелы из строки?

strip() убирает их только по краям. Для удаления всех пробелов используйте s.replace(" ", ""), а для любых пробельных символов "".join(s.split()).

Как посчитать количество слов в строке?

Разбейте строку без аргументов и возьмите длину списка: len(s.split()). Такой вызов игнорирует повторяющиеся пробелы и переводы строк.