W3docs

Методы строк Python

Методы строк Python: strip, split, join, replace, find, upper, lower и другие — с примерами, подводными камнями и советами по применению.

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

В этой главе рассмотрены наиболее важные методы строк, сгруппированные по назначению, с примерами и типичными подводными камнями. Об основах создания строк и индексировании рассказывается в главе Python Strings. Синтаксис срезов описан в главе Slicing Strings.

Преобразование регистра

upper() и lower()

upper() возвращает копию строки, в которой все буквы переведены в верхний регистр; lower() делает обратное.

python— editable, runs on the server

Эти методы не учитывают локаль при работе с ASCII-символами. Для корректного преобразования с учётом локали (например, турецкой буквы İ) используйте модуль locale или сторонние библиотеки.

title() и capitalize()

title() делает заглавной первую букву каждого слова. capitalize() делает заглавной только первый символ всей строки, переводя остальные в нижний регистр.

s = "hello world"
print(s.title())       # Hello World
print(s.capitalize())  # Hello world

Подводный камень: title() считает любой не-буквенный символ границей слова, поэтому "it's" превращается в "It'S". Если нужно умное определение границ слов, используйте функцию string.capwords() из стандартной библиотеки.

swapcase()

Инвертирует регистр каждого символа — верхний регистр становится нижним и наоборот.

print("Hello World".swapcase())  # hELLO wORLD

Пробелы и дополнение

strip(), lstrip() и rstrip()

Эти методы удаляют начальные и/или конечные символы (по умолчанию — пробельные символы).

s = "  Hello World  "
print(s.strip())   # "Hello World"
print(s.lstrip())  # "Hello World  "
print(s.rstrip())  # "  Hello World"

Можно передать строку символов для удаления — не префикс/суффикс, а любую комбинацию из указанных символов:

print("***hello***".strip("*"))   # hello
print("xyzhelloyz".strip("xyz"))  # hello

center(), ljust() и rjust()

Дополняют строку до заданной ширины. Необязательный символ заполнения (по умолчанию — пробел) занимает свободное место.

print("hi".center(10))       # "    hi    "
print("hi".ljust(10, "-"))   # "hi--------"
print("hi".rjust(10, "-"))   # "--------hi"

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

zfill()

Дополняет числовую строку ведущими нулями до заданной ширины. Метод учитывает ведущий знак + или -.

print("42".zfill(5))    # 00042
print("-7".zfill(5))    # -0007

Поиск и подсчёт

find() и rfind()

find(sub) возвращает наименьший индекс, по которому найдена подстрока sub, или -1, если подстрока не найдена. rfind(sub) находит наибольший (самый правый) индекс.

s = "Hello World"
print(s.find("World"))    # 6
print(s.find("xyz"))      # -1
print(s.rfind("l"))       # 9

Оба метода принимают необязательные аргументы start и end для ограничения диапазона поиска.

index() и rindex()

Работают точно так же, как find() и rfind(), но вызывают ValueError вместо возврата -1, когда подстрока не найдена. Используйте find(), когда отсутствие подстроки является нормальной ситуацией; используйте index(), когда её отсутствие означает ошибку.

s = "Hello World"
print(s.index("World"))   # 6
# s.index("xyz")          # raises ValueError

count()

Возвращает количество непересекающихся вхождений подстроки.

print("banana".count("a"))     # 3
print("banana".count("an"))    # 2
print("aaaa".count("aa"))      # 2  (non-overlapping)

startswith() и endswith()

Возвращают True, если строка начинается или заканчивается на указанный префикс/суффикс. Оба метода принимают кортеж строк для одновременной проверки нескольких вариантов.

filename = "report.pdf"
print(filename.startswith("report"))         # True
print(filename.endswith(".pdf"))             # True
print(filename.endswith((".pdf", ".docx")))  # True

Это зачастую нагляднее, чем срез: filename[-4:] == ".pdf".

Замена и разбиение

replace(old, new, count=-1)

Возвращает копию строки, в которой каждое вхождение old заменено на new. Передайте целое число третьим аргументом, чтобы ограничить количество замен.

python— editable, runs on the server

replace() выполняет точное буквальное совпадение; для замены по шаблону используйте функцию re.sub() из главы Python Regex.

split(sep=None, maxsplit=-1)

Разбивает строку по разделителю sep и возвращает список. Если sep не указан (или равен None), разбиение происходит по любым пробельным символам, а пустые строки отбрасываются — идеально для токенизации пользовательского ввода.

python— editable, runs on the server

split() всегда возвращает список, даже если разделитель отсутствует (список содержит только исходную строку).

rsplit(sep=None, maxsplit=-1)

Аналогичен split(), но начинает разбиение справа. Удобен, когда нужно получить только последние части строки.

path = "/home/user/documents/file.txt"
print(path.rsplit("/", 1))  # ['/home/user/documents', 'file.txt']

splitlines()

Разбивает строку по границам строк (\n, \r\n, \r и другим) и при желании сохраняет символы конца строки.

text = "line one\nline two\r\nline three"
print(text.splitlines())  # ['line one', 'line two', 'line three']

join(iterable)

Операция, обратная split(). Объединяет все элементы итерируемого объекта, вставляя между ними строку, для которой вызван метод. Это предпочтительный способ построить строку из списка, так как Python выполняет его за один шаг.

print(", ".join(["apples", "bananas", "cherries"]))
# apples, bananas, cherries

print("".join(["P", "y", "t", "h", "o", "n"]))
# Python

Подробнее см. в главе Concatenate Strings.

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

Эти методы возвращают True или False и удобны для валидации ввода.

МетодВозвращает True, когда…
isalpha()Все символы являются буквами
isdigit()Все символы являются цифрами (0–9)
isnumeric()Все символы являются числовыми (включая ², ½ и т.д.)
isalnum()Все символы являются буквами или цифрами
isspace()Все символы являются пробельными
islower()Все символы с регистром написаны в нижнем регистре
isupper()Все символы с регистром написаны в верхнем регистре
istitle()Строка оформлена в стиле заголовка
print("Python".isalpha())   # True
print("12345".isdigit())    # True
print("abc123".isalnum())   # True
print("   ".isspace())      # True
print("Hello World".istitle())  # True

Примечание: Для пустой строки все эти методы возвращают False.

Длина строки

len() — встроенная функция, а не метод строки, но она является основой работы со строками.

python— editable, runs on the server

Строки индексируются с нуля, поэтому допустимые индексы — от 0 до len(s) - 1.

Конкатенация

Оператор + объединяет две строки. Оператор * повторяет строку заданное количество раз.

python— editable, runs on the server

Для объединения большого числа строк или построения строки в цикле "".join(list) значительно быстрее, чем + в цикле. Сравнение производительности см. в главе Concatenate Strings.

Форматирование

format() и f-строки

str.format() подставляет значения в плейсхолдеры {}. F-строки (Python 3.6+) делают то же самое более лаконично и сейчас являются предпочтительным стилем.

name = "Alice"
score = 95

# str.format()
print("Hello, {}! Your score is {}.".format(name, score))

# f-string (preferred)
print(f"Hello, {name}! Your score is {score}.")
# Hello, Alice! Your score is 95.

Оба варианта поддерживают спецификаторы формата. Полный синтаксис описан в главе Python String Formatting.

encode()

Преобразует строку в объект bytes с использованием указанной кодировки (по умолчанию utf-8).

s = "café"
print(s.encode("utf-8"))   # b'caf\xc3\xa9'
print(s.encode("ascii", errors="replace"))  # b'caf?'

Краткий справочник

МетодЧто делает
s.upper()Весь текст в верхнем регистре
s.lower()Весь текст в нижнем регистре
s.title()Стиль заголовка (каждое слово)
s.capitalize()Первый символ в верхнем регистре
s.swapcase()Инвертировать регистр
s.strip(chars)Удалить начальные/конечные символы
s.lstrip(chars)Удалить начальные символы
s.rstrip(chars)Удалить конечные символы
s.center(w, fill)Центрировать в поле шириной w
s.ljust(w, fill)Выровнять по левому краю в поле шириной w
s.rjust(w, fill)Выровнять по правому краю в поле шириной w
s.zfill(w)Дополнить ведущими нулями
s.find(sub)Наименьший индекс sub, или -1
s.rfind(sub)Наибольший индекс sub, или -1
s.index(sub)Как find(), но вызывает ValueError
s.count(sub)Подсчёт непересекающихся вхождений
s.startswith(prefix)True, если строка начинается с префикса
s.endswith(suffix)True, если строка заканчивается суффиксом
s.replace(old, new)Заменить вхождения
s.split(sep)Разбить на список
s.rsplit(sep)Разбить справа
s.splitlines()Разбить по концам строк
sep.join(iterable)Объединить итерируемый объект с разделителем
s.isalpha()Все символы — буквы?
s.isdigit()Все символы — цифры?
s.isalnum()Все символы — буквы или цифры?
s.isspace()Все символы — пробельные?
s.format(...)Форматирование с плейсхолдерами
s.encode(enc)Кодирование в bytes

Практика

Практика
Which of the following Python string methods return -1 when the substring is not found (instead of raising an error)?
Which of the following Python string methods return -1 when the substring is not found (instead of raising an error)?
Was this page helpful?