Методы строк в Python — это готовые функции, которые вызываются через точку после строки: text.split(), text.strip(), text.replace("а", "б"). Они режут текст на части, склеивают его обратно, убирают лишние пробелы, ищут подстроки и меняют регистр.
Главное правило одно: метод не меняет исходную строку, а возвращает новую. Поэтому результат нужно сохранить в переменную. Ниже разобраны 15 самых ходовых методов, у каждого есть пример и вывод интерпретатора. Если вы только знакомитесь с языком, начните с обзора «Язык Python: стоит ли учить».
Что такое строка в Python и почему метод не меняет её

Строка в Python — это последовательность символов в кавычках: 'питон', "питон" или """питон""". В документации Python строки названы неизменяемыми последовательностями кодовых точек Юникода, проще говоря символов.
Кроме методов, со строкой работают встроенные функции и операторы. Их стоит знать вместе с методами:
len("питон")возвращает длину, здесь5;"питон"[0]даёт первый символ'п', а"питон"[-1]последний'н';"питон"[1:4]вырезает срез'ито', правая граница в него не входит;"py" + "thon"склеивает строки,"ха" * 3повторяет:'хахаха'.
Неизменяемость видно сразу, если попробовать заменить одну букву:
s = "питон"
s[0] = "П"
# TypeError: 'str' object does not support item assignment
Методы работают так же. Вызов s.upper() строит новую строку и отдаёт её, а s остаётся прежней:
s = "питон"
s.upper()
print(s) # питон
s = s.upper()
print(s) # ПИТОН
Чтобы увидеть результат, его нужно напечатать через print(), с этой функции начинается первая программа на Python. Решение здесь простое: всегда присваивайте результат. Либо в ту же переменную, либо в новую. Методы можно вызывать цепочкой, каждый следующий получает строку от предыдущего:
print(" Привет, МИР! ".strip().lower().replace("мир", "Python"))
# привет, Python!
Шпаргалка: 15 методов строк в одной таблице
Таблица для быстрого поиска. Подробности и подводные камни каждого метода разобраны в разделах ниже.
| Метод | Что делает | Пример | Результат |
|---|---|---|---|
split() |
делит строку на список | "a,b".split(",") |
['a', 'b'] |
join() |
склеивает список в строку | "-".join(["a", "b"]) |
'a-b' |
strip() |
убирает пробелы по краям | " a ".strip() |
'a' |
replace() |
заменяет подстроку | "кот".replace("к", "р") |
'рот' |
find() |
ищет позицию подстроки | "питон".find("то") |
2 |
index() |
то же, но с ошибкой при неудаче | "питон".index("то") |
2 |
count() |
считает вхождения | "мама".count("а") |
2 |
startswith() |
проверяет начало | "файл.txt".startswith("ф") |
True |
endswith() |
проверяет конец | "файл.txt".endswith(".txt") |
True |
lower() |
переводит в нижний регистр | "ПиТоН".lower() |
'питон' |
upper() |
переводит в верхний регистр | "питон".upper() |
'ПИТОН' |
title() |
делает каждое слово с заглавной | "анна каренина".title() |
'Анна Каренина' |
isdigit() |
проверяет, что в строке только цифры | "2026".isdigit() |
True |
isalpha() |
проверяет, что в строке только буквы | "Привет".isalpha() |
True |
zfill() |
дополняет нулями слева | "7".zfill(3) |
'007' |
Всего у строки в Python 3.14 сорок семь публичных методов. Полный список печатает команда dir(str) в интерпретаторе (если Python ещё не стоит, вот как его скачать и установить), справку по любому методу даёт help(str.split). Остальные встречаются реже, а несколько полезных родственников (rsplit(), casefold(), removeprefix()) упомянуты рядом с основными.
split(): что делает и как разбить строку на части
Метод split() делит строку по разделителю и возвращает список кусков. Разделитель передаётся первым аргументом. Если его не указать, Python режет по пробелам, табуляциям и переводам строк.
"яблоко,груша,слива".split(",")
# ['яблоко', 'груша', 'слива']
" раз два три ".split()
# ['раз', 'два', 'три']
split() и split(" ") работают по-разному
Это самая частая ловушка. Без аргумента подряд идущие пробелы считаются одним разделителем, а пустых строк по краям не будет. С явным пробелом каждый пробел режет строку отдельно:
" раз два три ".split(" ")
# ['', '', 'раз', '', 'два', '', '', 'три', '']
Так же ведёт себя любой явный разделитель. Две запятые подряд дают пустой элемент: "a,,b".split(",") вернёт ['a', '', 'b']. Это поведение описано в справке по str.split.
Ограничить число разрезов и резать справа
Второй аргумент maxsplit задаёт, сколько раз резать. Метод rsplit() делает то же самое, но начинает справа. Так удобно отделять расширение файла или последний кусок пути:
"2026-10-15".split("-", 1)
# ['2026', '10-15']
"путь/к/файлу.txt".rsplit("/", 1)
# ['путь/к', 'файлу.txt']
Разбить текст по строкам и найти разделитель один раз
splitlines()делит текст по переводам строк и понимает разные их виды:"первая\nвторая\r\nтретья".splitlines()вернёт['первая', 'вторая', 'третья'].partition(",")режет только по первому разделителю и всегда возвращает кортеж из трёх частей: до, сам разделитель и после.- Пустая строка тоже ведёт себя по-разному:
"".split()даёт[], а"".split(",")даёт['']. - Несколько разных разделителей за раз split() не понимает. Для этого есть
re.split()из модуля регулярных выражений:re.split(r"[,;]", "a,b;c")вернёт['a', 'b', 'c'].
Про то, как потом работать с полученным списком, есть отдельные инструкции: как добавить элемент в список, как удалить элемент и как отсортировать список.
join(): как склеить список в строку

join() делает обратное split(): собирает список строк в одну строку. Метод вызывается у разделителя, а список передаётся аргументом. Сначала это выглядит непривычно, зато разделитель виден сразу:
", ".join(["яблоко", "груша", "слива"])
# 'яблоко, груша, слива'
"".join(["п", "и", "т", "о", "н"])
# 'питон'
Подвох в типах. Если в списке есть хотя бы одно число, join() падает с ошибкой, и документация это прямо оговаривает:
"-".join([2026, 10, 15])
# TypeError: sequence item 0: expected str instance, int found
"-".join(map(str, [2026, 10, 15]))
# '2026-10-15'
Решение: перед склейкой переведите элементы в строки через map(str, ...). Чтобы собрать многострочный текст, используйте "\n".join(...).
strip(), lstrip() и rstrip(): убрать пробелы и лишние символы
Метод strip() срезает пробелы, табуляции и переводы строк с обоих концов. lstrip() чистит только слева, rstrip() только справа. Внутри строки пробелы остаются на месте.
" привет ".strip() # 'привет'
" привет ".lstrip() # 'привет '
" привет ".rstrip() # ' привет'
"\tтекст\n".strip() # 'текст'
Аргумент у strip() задаёт не слово, а набор символов. Python убирает с краёв любые из них, пока не встретит чужой символ. Из-за этого можно случайно отрезать лишнее:
"---заголовок---".strip("-")
# 'заголовок'
"www.example.com".strip("w.moc")
# 'example'
Если нужно убрать именно приставку или окончание целиком, с Python 3.9 есть removeprefix() и removesuffix(). Их добавили предложением PEP 616:
"www.example.com".removeprefix("www.") # 'example.com'
"report.txt".removesuffix(".txt") # 'report'
replace(): заменить подстроку в строке
replace(old, new) заменяет все вхождения подстроки. Третий аргумент ограничивает число замен, считая слева:
"кот и кот".replace("кот", "пёс") # 'пёс и пёс'
"кот и кот".replace("кот", "пёс", 1) # 'пёс и кот'
Замены удобно ставить цепочкой. Например, так телефон из формы превращается в одну строку цифр:
"8 (999) 123-45-67".replace(" ", "").replace("(", "").replace(")", "").replace("-", "")
# '89991234567'
replace() различает регистр:
"Кот".replace("кот", "пёс")вернёт'Кот'без изменений. Для замены по шаблону или без учёта регистра нужен модульre.
Поиск в строке: find(), index(), count(), startswith() и endswith()
Если нужно просто узнать, есть ли подстрока в тексте, методы не нужны. Хватит оператора in: "грам" in "программирование" вернёт True. Про in и другие знаки есть разбор операторов Python.
Методы поиска нужны, когда важна позиция или количество:
| Вызов | Результат | Что произошло |
|---|---|---|
"программирование".find("грам") |
3 |
подстрока начинается с индекса 3 |
"программирование".find("java") |
-1 |
не нашлось, ошибки нет |
"программирование".index("java") |
ValueError |
не нашлось, программа падает |
"программирование".rfind("р") |
9 |
последнее вхождение |
"программирование".count("р") |
3 |
три буквы «р» |
"ааа".count("аа") |
1 |
перекрывающиеся вхождения не считаются |
Выбор между find() и index() простой. Если подстроки может не быть и это нормально, берите find() и проверяйте -1. Если подстрока обязана быть, берите index(): ошибка сразу покажет, что данные пришли не те.
Проверку на -1 удобно уложить в одну строку тернарным оператором: pos = s.find("x"); print("нет" if pos == -1 else pos).
Методы startswith() и endswith() проверяют начало и конец строки. Им можно передать кортеж вариантов, это короче цепочки из or:
"report.pdf".endswith((".pdf", ".docx")) # True
"https://checkroi.ru".startswith("https://") # True
Регистр: lower(), upper(), title(), capitalize() и casefold()
Сравнение строк в Python учитывает регистр: "Python" == "python" даёт False. Поэтому перед сравнением ввод обычно приводят к одному регистру.
lower()иupper()переводят всю строку в нижний или верхний регистр. Кириллица и буква «ё» обрабатываются правильно:"Ёлка".lower()вернёт'ёлка'.title()делает заглавной первую букву каждого слова:'Анна Каренина'.capitalize()поднимает только первую букву строки:'Анна каренина'.swapcase()меняет регистр на противоположный:"ПиТоН"станет'пИтОн'.
Проверка и смена регистра нужны, например, в шифре Цезаря: заглавные буквы там сдвигаются отдельно от строчных.
У title() есть известная странность. Апостроф он считает границей слова, поэтому "it's python".title() даёт "It'S Python". В справке по title() как вариант без этой проблемы названа функция string.capwords(): она делит слова только по пробелам.
Для сравнения без учёта регистра есть casefold(). Он агрессивнее lower(): немецкую «ß» превращает в «ss». Для русского текста разницы обычно нет, но для многоязычных данных casefold() надёжнее:
"Straße".lower() # 'straße'
"Straße".casefold() # 'strasse'
"Straße".casefold() == "STRASSE".casefold() # True
Проверки содержимого: isdigit(), isalpha() и другие
Методы на is отвечают True или False и нужны для проверки ввода. Пустая строка почти во всех таких проверках даёт False, исключения только isascii() и isprintable().
"2026".isdigit() # True
"-5".isdigit() # False: минус не цифра
"3.14".isdigit() # False: точка не цифра
"Привет".isalpha() # True: кириллица считается буквами
"Привет мир".isalpha() # False: пробел не буква
"python3".isalnum() # True: буквы и цифры
" ".isspace() # True
"ПРИВЕТ".isupper() # True
Главная ловушка: проверить число через isdigit() и сразу позвать int(). isdigit() пропускает надстрочные цифры вроде «²», и тогда int() падает:
"²".isdigit() # True
"²".isdecimal() # False
int("²") # ValueError: invalid literal for int() with base 10: '²'
Решение: для проверки перед int() берите isdecimal(). По справке по isdecimal(), он пропускает только символы, из которых можно составить число в десятичной системе. Отрицательные и дробные числа проще ловить через try и except ValueError, чем методами строки.
Выравнивание: zfill(), center(), ljust() и rjust()
Эти методы дополняют строку до нужной длины. Чаще всего нужен zfill(): он дописывает нули слева и не ломает знак числа.
"7".zfill(3) # '007'
"-7".zfill(3) # '-07'
"меню".center(12, "*") # '****меню****'
"цена".ljust(10, ".") + "500 ₽" # 'цена......500 ₽'
"42".rjust(6) # ' 42'
Для вывода чисел с подстановкой значений в текст удобнее f-строки: f"{n:03}" даёт тот же результат, что zfill(3) для положительных чисел.
Три задачи, где методы работают вместе

Принять ответ пользователя
Человек может ввести «Да», « да » или «ДА». Чтобы программа поняла все варианты, ввод чистят и приводят к одному регистру:
answer = " Да \n"
print(answer.strip().lower() == "да") # True
Посчитать слова в тексте
text = "Строка — это текст. Строка неизменяема, текст можно разбить."
words = text.lower().replace(".", "").replace(",", "").replace("—", "").split()
print(len(words), words.count("строка"), words.count("текст"))
# 8 2 2
Здесь count() вызван у списка, а не у строки. У списков тоже есть такой метод, а сложить числа из списка поможет функция sum().
Проверить телефон
raw = " +7 (999) 123-45-67 "
digits = "".join(ch for ch in raw if ch.isdigit())
print(digits, len(digits) == 11 and digits.startswith(("7", "8")))
# 79991234567 True
Больше таких упражнений собрано в подборке 30 задач по Python для начинающих.
Частые ошибки и что с ними делать
- Вызвали метод и не сохранили результат.
city.upper()без присваивания ничего не меняет. Решение:city = city.upper(). - Разбили по
" "вместо пустого split(). В результате появляются пустые строки там, где пробелов несколько. Решение:split()без аргумента. - Передали strip() слово.
strip("abc")убирает символы a, b и c в любом порядке, а не слово «abc». Решение:removeprefix()илиremovesuffix(). - Склеили join() список с числами. Получили TypeError. Решение:
"".join(map(str, items)). - Проверили число через isdigit(). Минус и точка дают False, а «²» даёт True. Решение:
isdecimal()илиtryсint(). - Вызвали split() у None или списка. Получили AttributeError: метод есть только у строк. Решение: проверьте, что пришло, через
type(x)илиprint(repr(x)).
Если методов строк уже не хватает и нужен поиск по шаблону, пора переходить к регулярным выражениям из модуля re.
Где освоить Python системно
Методы строк занимают небольшую часть языка. Чтобы уверенно писать программы целиком, нужны ещё циклы, функции, работа с файлами и библиотеками.
Если хочется пройти язык по программе с практикой и проверкой кода, сравните курсы Python по цене, длительности и формату. Для тех, кто целится в работу, есть подборка по профессии Python-разработчик.
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Профессия «Python-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 137 011 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| ДО Профессия Python-разработчик Перейти на сайт курса | 149 001 ₽ | 3167 ₽/мес. | 10 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 118 666 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Программирование на Python ПРО Перейти на сайт курса | 119 600 ₽ | - | 17 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python




