Методы строк в Python: полный разбор с примерами
Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе
У строк в Python есть целый набор встроенных методов. С их помощью можно менять регистр, убирать лишние пробелы, искать слова, разбивать текст на части и многое другое.
Представьте, что методы строк похожи на приложения в телефоне. Каждое выполняет одну конкретную задачу. Запоминать их все прямо сейчас не нужно: достаточно знать, что они есть, чтобы в нужный момент взять подходящий.
В этом уроке вы разберёте все основные методы строк на живых примерах, которые можно запускать и менять. К концу урока вы сможете очищать, искать, разбивать и преобразовывать любой текст, который попадётся вам в Python.
Как перевести строку в верхний регистр в Python
В Python есть пять методов для изменения регистра строки. Чаще всего используются два из них: upper() и lower().
HELLO, WORLD! hello, world! Hello, World! Hello, world! HELLO, WORLD!
upper() переводит все буквы в верхний регистр. lower() переводит все буквы в нижний регистр. Это рабочие лошадки, которыми вы будете пользоваться чаще всего.
title() делает заглавной первую букву каждого слова, как в названии книги. capitalize() делает заглавной только самую первую букву, а все остальные переводит в нижний регистр.
swapcase() меняет регистр каждой буквы на противоположный: заглавные становятся строчными, и наоборот. Нужен он нечасто, но иногда выручает.
User said yes! Ada Lovelace
Как удалить пробелы из строки в Python
Лишние пробелы и невидимые символы постоянно пробираются в строки: из ввода пользователя, при чтении файлов или при копировании текста. С этим отлично справляется семейство методов strip().
' hello, world! ' 'hello, world!' 'hello, world! ' ' hello, world!'
strip() удаляет пробельные символы с обоих концов строки. Это как срезать корочку с обеих сторон бутерброда.
lstrip() обрезает только левый край. rstrip() обрезает только правый. Буквы «l» и «r» означают left и right, то есть «слева» и «справа».
В примере мы использовали repr(), чтобы пробелы было видно. Обычный print() спрятал бы пробелы в конце строки.
report.txt https://example.com
Как искать внутри строки в Python
В Python есть несколько способов найти текст внутри строки. Самые важные из них: find(), count(), startswith() и endswith().
Как использовать find() и index() в Python
find() сообщает, где подстрока встречается впервые. Метод возвращает индекс (номер позиции) первого совпадения, считая от 0.
7 2 -1 3 11
Если find() не находит подстроку, он возвращает -1. Так он сообщает: «не найдено».
index() делает то же, что и find(), но с одним важным отличием: если подстрока не найдена, он выбрасывает ValueError, а не возвращает -1.
text = "hello world"
result = text.find("xyz")
print(result) # -1 (safe, no crash)text = "hello world"
# result = text.index("xyz")
# ValueError: substring not found
# Use index() only when you're SURE
# the substring exists
result = text.index("world")
print(result) # 6Как посчитать вхождения в строке с помощью count()
count() сообщает, сколько раз подстрока встречается в строке. Метод учитывает регистр, поэтому «The» и «the» считаются по отдельности.
3 4 0 0
Как проверить начало и конец строки в Python
startswith() и endswith() возвращают True или False. Они идеально подходят, чтобы проверять расширения файлов, начало URL-адреса или любой шаблон по краям строки.
True True False True
Как заменить текст в строке Python
replace() заменяет каждое вхождение одной подстроки на другую. Это как функция «Найти и заменить» в текстовом редакторе.
I like dogs. Cats are great. I have two dogs. I like dogs. Cats are great. I have two cats.
Третий аргумент необязателен. Он ограничивает число замен. Без него replace() меняет все найденные совпадения.
Помните: replace() учитывает регистр. «cats» и «Cats» считаются разными подстроками.
Как разбить строку в Python
split() разрезает строку на список строк поменьше. По умолчанию он разбивает строку по любым пробельным символам (пробелам, табуляциям, переводам строки).
['Python', 'is', 'easy', 'to', 'learn'] ['Alice', '25', 'New York', 'Engineer'] John Smith Jr.
Первый аргумент задаёт разделитель, то есть символ (или строку), по которому строка разрезается. Второй аргумент ограничивает число разбиений.
rsplit() работает так же, но разбивает строку справа. Это важно, когда вы задаёте ограничение.
['home', 'user/documents/report.txt'] ['home/user/documents', 'report.txt']
Как объединить список в строку в Python
join() делает обратное split(). Он берёт список строк и склеивает их через разделитель. Разделителем служит строка, у которой вы вызываете join().
Python is awesome Python-is-awesome Python, is, awesome Python is awesome
Поначалу синтаксис кажется перевёрнутым: separator.join(list). Читайте его так: «соединить этим разделителем вот этот список».
Частый приём: разбить строку, изменить части и снова склеить их вместе.
PYTHON IS EASY TO LEARN Alice,25,New York
Как проверить содержимое строки в Python
В Python есть семейство методов is____(), которые возвращают True или False в зависимости от того, из чего состоит строка. Они отлично подходят для проверки ввода пользователя.
True False True False True False True False
isalpha() проверяет, что в строке только буквы. isdigit() проверяет, что только цифры. isalnum() проверяет, что только буквы или цифры (буквенно-цифровые символы). isspace() проверяет, что только пробельные символы.
Для пустой строки все эти методы возвращают False. В пустой строке нет символов, которые можно проверить, поэтому проверку не проходит ничего.
"player42" is a valid username You entered the number 42
Как дополнить и выровнять строку в Python
Иногда текст должен быть определённой ширины: для таблиц, чеков или аккуратного вывода в терминале. Методы выравнивания в Python добавляют символы, чтобы заполнить свободное место.
hi ----hi---- hi........ ........hi 00042 007
center() выравнивает строку по центру заданной ширины. ljust() выравнивает по левому краю и дополняет справа. rjust() выравнивает по правому краю и дополняет слева.
zfill() позволяет быстро дополнить число нулями слева. Он идеально подходит для номеров заказов, отметок времени или имён файлов вроде image_007.png.
Item Price ----------------------- Coffee $4.50 Sandwich $8.99 Cookie $2.25 ----------------------- Total $15.74
Как вызывать методы строк цепочкой в Python
Поскольку каждый метод строки возвращает новую строку, у результата можно сразу вызвать следующий метод. Это называется цепочкой методов.
hello world! hello world!
Читайте цепочку слева направо: сначала убираем пробелы по краям, затем переводим в нижний регистр, затем заменяем. Каждый метод работает с результатом предыдущего.
Упражнения для практики
Пора пустить методы строк в дело! Каждое упражнение посвящено своей группе методов из этого урока.
В переменной user_input хранится неаккуратная строка. В ней лишние пробелы с обеих сторон и случайные заглавные буквы.
Очистите её:
1. Удалите пробельные символы с обоих концов
2. Переведите все буквы в нижний регистр
Выведите очищенный результат. Вывод должен быть таким:
hello pythonПосчитайте, сколько раз слово "the" встречается в предложении ниже. Используйте метод count().
Выведите результат точно в таком формате:
the appears 4 timesПодсказка: сначала переведите строку в нижний регистр, чтобы посчитать и «the», и «The».
Замените в предложении ниже каждое вхождение "JavaScript" на "Python" и выведите результат.
Ожидаемый вывод:
I love Python. Python is great. Learning Python is fun.У вас есть строка со значениями через запятую. Разбейте её на отдельные значения и выведите каждое на своей строке.
Ожидаемый вывод:
Alice
25
New York
EngineerЭтот код пытается найти позицию "Python" в предложении. Когда слово есть, всё работает, а когда его нет, программа падает с ошибкой.
Исправьте код так, чтобы он:
"Word not found", когда слова нетОжидаемый вывод:
Found at position 7
Word not foundПодсказка: ошибка в том, что index() падает, когда слова нет. Какой метод вместо этого возвращает -1?
Напишите программу, которая проверяет имя пользователя по таким правилам:
Даны три имени пользователя. Для каждого выведите "Valid", если оно соответствует обоим правилам, или "Invalid", если нарушает хотя бы одно из них.
Ожидаемый вывод:
player42: Valid
ab: Invalid
hello world!: InvalidИтоги: шпаргалка по методам строк в Python
Вот краткий справочник по всем методам из этого урока:
| Метод | Что делает | Пример |
|---|---|---|
upper() | Всё в верхний регистр | "hi".upper() → "HI" |
lower() | Всё в нижний регистр | "HI".lower() → "hi" |
title() | Каждое слово с заглавной буквы | "hi there".title() → "Hi There" |
capitalize() | Заглавная первая буква | "hi there".capitalize() → "Hi there" |
strip() | Удаляет пробельные символы по краям | " hi ".strip() → "hi" |
find() | Позиция подстроки (-1, если её нет) | "hello".find("ll") → 2 |
count() | Считает вхождения | "banana".count("a") → 3 |
startswith() | Проверяет начало | "hello".startswith("he") → True |
endswith() | Проверяет конец | "file.py".endswith(".py") → True |
replace() | Заменяет подстроки | "hi".replace("hi", "bye") → "bye" |
split() | Разбивает на список | "a,b,c".split(",") → ["a","b","c"] |
join() | Склеивает список | ",".join(["a","b"]) → "a,b" |
isdigit() | Только цифры? | "123".isdigit() → True |
isalpha() | Только буквы? | "abc".isalpha() → True |
isalnum() | Буквы или цифры? | "abc1".isalnum() → True |
zfill() | Дополняет нулями | "42".zfill(5) → "00042" |
Заучивать эту таблицу не нужно. Важно знать, что такие методы существуют, чтобы найти нужный, когда он понадобится.
Что дальше?
В следующем уроке, [Форматирование строк в Python](/python/python-string-formatting), вы узнаете, как точно управлять тем, как значения выглядят внутри строк. Вы освоите форматирование в f-строках, выравнивание, форматирование чисел и многое другое.