Перейти к содержимому
Editor

Методы строк в Python: полный разбор с примерами

Начальный25 min6 упр.100 XP

Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе

0/6 упр.

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

Представьте, что методы строк похожи на приложения в телефоне. Каждое выполняет одну конкретную задачу. Запоминать их все прямо сейчас не нужно: достаточно знать, что они есть, чтобы в нужный момент взять подходящий.

В этом уроке вы разберёте все основные методы строк на живых примерах, которые можно запускать и менять. К концу урока вы сможете очищать, искать, разбивать и преобразовывать любой текст, который попадётся вам в Python.

Как перевести строку в верхний регистр в Python

В Python есть пять методов для изменения регистра строки. Чаще всего используются два из них: upper() и lower().

Все пять методов для регистра
greeting = "hello, world!"
print(greeting.upper()) # HELLO, WORLD!
print(greeting.lower()) # hello, world!
print(greeting.title()) # Hello, World!
print(greeting.capitalize()) # Hello, world!
print(greeting.swapcase()) # HELLO, WORLD!
Вывод
HELLO, WORLD!
hello, world!
Hello, World!
Hello, world!
HELLO, WORLD!

upper() переводит все буквы в верхний регистр. lower() переводит все буквы в нижний регистр. Это рабочие лошадки, которыми вы будете пользоваться чаще всего.

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

swapcase() меняет регистр каждой буквы на противоположный: заглавные становятся строчными, и наоборот. Нужен он нечасто, но иногда выручает.

Методы регистра на практике
# Real-world use: case-insensitive comparison
user_input = "Yes"
# Without lower(), "Yes" != "yes" and your check fails
if user_input.lower() == "yes":
print("User said yes!")
# title() is great for formatting names
full_name = "ada lovelace"
print(full_name.title()) # Ada Lovelace
Вывод
User said yes!
Ada Lovelace

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

Лишние пробелы и невидимые символы постоянно пробираются в строки: из ввода пользователя, при чтении файлов или при копировании текста. С этим отлично справляется семейство методов strip().

strip(), lstrip() и rstrip()
messy = " hello, world! "
print(repr(messy)) # ' hello, world! '
print(repr(messy.strip())) # 'hello, world!'
print(repr(messy.lstrip())) # 'hello, world! '
print(repr(messy.rstrip())) # ' hello, world!'
Вывод
'   hello, world!   '
'hello, world!'
'hello, world!   '
'   hello, world!'

strip() удаляет пробельные символы с обоих концов строки. Это как срезать корочку с обеих сторон бутерброда.

lstrip() обрезает только левый край. rstrip() обрезает только правый. Буквы «l» и «r» означают left и right, то есть «слева» и «справа».

В примере мы использовали repr(), чтобы пробелы было видно. Обычный print() спрятал бы пробелы в конце строки.

Удаление определённых символов
# You can also strip specific characters
filename = "###report.txt###"
print(filename.strip("#")) # report.txt
url = "https://example.com/"
print(url.rstrip("/")) # https://example.com
Вывод
report.txt
https://example.com

Как искать внутри строки в Python

В Python есть несколько способов найти текст внутри строки. Самые важные из них: find(), count(), startswith() и endswith().

Как использовать find() и index() в Python

find() сообщает, где подстрока встречается впервые. Метод возвращает индекс (номер позиции) первого совпадения, считая от 0.

find() возвращает позицию подстроки
sentence = "I love Python programming"
print(sentence.find("Python")) # 7 (starts at position 7)
print(sentence.find("love")) # 2
print(sentence.find("Java")) # -1 (not found)
print(sentence.find("o")) # 3 (first occurrence)
print(sentence.find("o", 4)) # 13 (search starting from position 4)
Вывод
7
2
-1
3
11

Если find() не находит подстроку, он возвращает -1. Так он сообщает: «не найдено».

index() делает то же, что и find(), но с одним важным отличием: если подстрока не найдена, он выбрасывает ValueError, а не возвращает -1.

find(): возвращает -1, если ничего не нашёл
text = "hello world"
result = text.find("xyz")
print(result)  # -1 (safe, no crash)
index(): выбрасывает ошибку, если ничего не нашёл
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» считаются по отдельности.

count() считает вхождения подстроки
text = "the cat sat on the mat by the hat"
print(text.count("the")) # 3
print(text.count("at")) # 4 (cat, sat, mat, hat)
print(text.count("dog")) # 0
print(text.count("The")) # 0 (case-sensitive!)
Вывод
3
4
0
0

Как проверить начало и конец строки в Python

startswith() и endswith() возвращают True или False. Они идеально подходят, чтобы проверять расширения файлов, начало URL-адреса или любой шаблон по краям строки.

startswith() и endswith()
filename = "report_2024.pdf"
print(filename.startswith("report")) # True
print(filename.endswith(".pdf")) # True
print(filename.endswith(".txt")) # False
# Check multiple options with a tuple
print(filename.endswith((".pdf", ".docx", ".txt"))) # True
Вывод
True
True
False
True

Как заменить текст в строке Python

replace() заменяет каждое вхождение одной подстроки на другую. Это как функция «Найти и заменить» в текстовом редакторе.

replace() заменяет подстроки
message = "I like cats. Cats are great. I have two cats."
# Replace all occurrences
print(message.replace("cats", "dogs"))
# I like dogs. Cats are great. I have two dogs.
# Notice "Cats" (capital C) was NOT replaced -- case matters!
# Limit replacements with the third argument
print(message.replace("cats", "dogs", 1))
# I like dogs. Cats are great. I have two cats.
Вывод
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() разрезает строку на список строк поменьше. По умолчанию он разбивает строку по любым пробельным символам (пробелам, табуляциям, переводам строки).

split() разбивает строку на список
sentence = "Python is easy to learn"
words = sentence.split()
print(words) # ['Python', 'is', 'easy', 'to', 'learn']
# Split on a specific character
csv_line = "Alice,25,New York,Engineer"
values = csv_line.split(",")
print(values) # ['Alice', '25', 'New York', 'Engineer']
# Split with a limit
first, rest = "John Smith Jr.".split(" ", 1)
print(first) # John
print(rest) # Smith Jr.
Вывод
['Python', 'is', 'easy', 'to', 'learn']
['Alice', '25', 'New York', 'Engineer']
John
Smith Jr.

Первый аргумент задаёт разделитель, то есть символ (или строку), по которому строка разрезается. Второй аргумент ограничивает число разбиений.

rsplit() работает так же, но разбивает строку справа. Это важно, когда вы задаёте ограничение.

rsplit() разбивает справа
path = "home/user/documents/report.txt"
# split from the left
print(path.split("/", 1)) # ['home', 'user/documents/report.txt']
# rsplit from the right
print(path.rsplit("/", 1)) # ['home/user/documents', 'report.txt']
Вывод
['home', 'user/documents/report.txt']
['home/user/documents', 'report.txt']

Как объединить список в строку в Python

join() делает обратное split(). Он берёт список строк и склеивает их через разделитель. Разделителем служит строка, у которой вы вызываете join().

join() склеивает строки
words = ["Python", "is", "awesome"]
sentence = " ".join(words)
print(sentence) # Python is awesome
# Use any separator you want
print("-".join(words)) # Python-is-awesome
print(", ".join(words)) # Python, is, awesome
print("\n".join(words)) # Each word on its own line
Вывод
Python is awesome
Python-is-awesome
Python, is, awesome
Python
is
awesome

Поначалу синтаксис кажется перевёрнутым: separator.join(list). Читайте его так: «соединить этим разделителем вот этот список».

Частый приём: разбить строку, изменить части и снова склеить их вместе.

Разбить, изменить и склеить обратно
# Capitalize every word manually
sentence = "python is easy to learn"
words = sentence.split()
capitalized = [word.upper() for word in words]
result = " ".join(capitalized)
print(result) # PYTHON IS EASY TO LEARN
# Build a CSV line from data
fields = ["Alice", "25", "New York"]
csv_line = ",".join(fields)
print(csv_line) # Alice,25,New York
Вывод
PYTHON IS EASY TO LEARN
Alice,25,New York

Как проверить содержимое строки в Python

В Python есть семейство методов is____(), которые возвращают True или False в зависимости от того, из чего состоит строка. Они отлично подходят для проверки ввода пользователя.

isalpha(), isdigit(), isalnum() и isspace()
print("hello".isalpha()) # True (only letters)
print("hello1".isalpha()) # False (contains a digit)
print("12345".isdigit()) # True (only digits)
print("12.5".isdigit()) # False (dot is not a digit)
print("hello1".isalnum()) # True (letters and digits only)
print("hello!".isalnum()) # False (! is not alphanumeric)
print(" ".isspace()) # True (only whitespace)
print(" hi ".isspace()) # False (contains letters)
Вывод
True
False
True
False
True
False
True
False

isalpha() проверяет, что в строке только буквы. isdigit() проверяет, что только цифры. isalnum() проверяет, что только буквы или цифры (буквенно-цифровые символы). isspace() проверяет, что только пробельные символы.

Для пустой строки все эти методы возвращают False. В пустой строке нет символов, которые можно проверить, поэтому проверку не проходит ничего.

Методы проверки для валидации
# Practical example: validate a username
username = "player42"
if username.isalnum():
print(f"\"{username}\" is a valid username")
else:
print(f"\"{username}\" contains invalid characters")
# Check if user typed a number
user_input = "42"
if user_input.isdigit():
number = int(user_input)
print(f"You entered the number {number}")
else:
print("That's not a valid number")
Вывод
"player42" is a valid username
You entered the number 42

Как дополнить и выровнять строку в Python

Иногда текст должен быть определённой ширины: для таблиц, чеков или аккуратного вывода в терминале. Методы выравнивания в Python добавляют символы, чтобы заполнить свободное место.

center(), ljust(), rjust() и zfill()
word = "hi"
print(word.center(10)) # " hi "
print(word.center(10, "-")) # "----hi----"
print(word.ljust(10, ".")) # "hi........"
print(word.rjust(10, ".")) # "........hi"
# zfill() pads with zeros on the left
print("42".zfill(5)) # 00042
print("7".zfill(3)) # 007
Вывод
    hi    
----hi----
hi........
........hi
00042
007

center() выравнивает строку по центру заданной ширины. ljust() выравнивает по левому краю и дополняет справа. rjust() выравнивает по правому краю и дополняет слева.

zfill() позволяет быстро дополнить число нулями слева. Он идеально подходит для номеров заказов, отметок времени или имён файлов вроде image_007.png.

Собираем аккуратную таблицу
# Build a neat table
print("Item".ljust(15) + "Price".rjust(8))
print("-" * 23)
print("Coffee".ljust(15) + "$4.50".rjust(8))
print("Sandwich".ljust(15) + "$8.99".rjust(8))
print("Cookie".ljust(15) + "$2.25".rjust(8))
print("-" * 23)
print("Total".ljust(15) + "$15.74".rjust(8))
Вывод
Item              Price
-----------------------
Coffee            $4.50
Sandwich          $8.99
Cookie            $2.25
-----------------------
Total            $15.74

Как вызывать методы строк цепочкой в Python

Поскольку каждый метод строки возвращает новую строку, у результата можно сразу вызвать следующий метод. Это называется цепочкой методов.

Методы в одной цепочке
user_input = " Hello, World! "
# Chain multiple methods together
cleaned = user_input.strip().lower().replace(",", "")
print(cleaned) # hello world!
# Same thing step by step:
step1 = user_input.strip() # "Hello, World!"
step2 = step1.lower() # "hello, world!"
step3 = step2.replace(",", "") # "hello world!"
print(step3) # hello world!
Вывод
hello world!
hello world!

Читайте цепочку слева направо: сначала убираем пробелы по краям, затем переводим в нижний регистр, затем заменяем. Каждый метод работает с результатом предыдущего.


Упражнения для практики

Пора пустить методы строк в дело! Каждое упражнение посвящено своей группе методов из этого урока.

Упражнение 1: очистите ввод пользователя
Напишите код

В переменной user_input хранится неаккуратная строка. В ней лишние пробелы с обеих сторон и случайные заглавные буквы.

Очистите её:

1. Удалите пробельные символы с обоих концов

2. Переведите все буквы в нижний регистр

Выведите очищенный результат. Вывод должен быть таким:

hello python
user_input = " HeLLo PyThOn "
# Clean up the input and print it
Упражнение 2: посчитайте вхождения слова
Напишите код

Посчитайте, сколько раз слово "the" встречается в предложении ниже. Используйте метод count().

Выведите результат точно в таком формате:

the appears 4 times

Подсказка: сначала переведите строку в нижний регистр, чтобы посчитать и «the», и «The».

sentence = "The cat sat on the mat by the door and The dog watched"
# Count how many times "the" appears and print it
Упражнение 3: замените все вхождения
Напишите код

Замените в предложении ниже каждое вхождение "JavaScript" на "Python" и выведите результат.

Ожидаемый вывод:

I love Python. Python is great. Learning Python is fun.
sentence = "I love JavaScript. JavaScript is great. Learning JavaScript is fun."
# Replace JavaScript with Python and print it
Упражнение 4: разбейте строку CSV
Напишите код

У вас есть строка со значениями через запятую. Разбейте её на отдельные значения и выведите каждое на своей строке.

Ожидаемый вывод:

Alice
25
New York
Engineer
csv_line = "Alice,25,New York,Engineer"
# Split the line by commas and print each value
Упражнение 5: исправьте ошибку (find() или index())
Исправьте ошибку

Этот код пытается найти позицию "Python" в предложении. Когда слово есть, всё работает, а когда его нет, программа падает с ошибкой.

Исправьте код так, чтобы он:

  • Выводил позицию, когда слово найдено
  • Выводил "Word not found", когда слова нет
  • Ожидаемый вывод:

    Found at position 7
    Word not found

    Подсказка: ошибка в том, что index() падает, когда слова нет. Какой метод вместо этого возвращает -1?

    sentence = "I love Python programming"
    # Find "Python" -- this line works fine
    pos = sentence.index("Python")
    print(f"Found at position {pos}")
    # Find "Java" -- this line crashes!
    pos = sentence.index("Java")
    if pos >= 0:
    print(f"Found at position {pos}")
    else:
    print("Word not found")
    Упражнение 6: проверьте имя пользователя
    Напишите код

    Напишите программу, которая проверяет имя пользователя по таким правилам:

  • Имя должно состоять только из букв и цифр
  • Длина имени должна быть от 3 до 15 символов
  • Даны три имени пользователя. Для каждого выведите "Valid", если оно соответствует обоим правилам, или "Invalid", если нарушает хотя бы одно из них.

    Ожидаемый вывод:

    player42: Valid
    ab: Invalid
    hello world!: Invalid
    usernames = ["player42", "ab", "hello world!"]
    # Check each username and print if it's valid or 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-строках, выравнивание, форматирование чисел и многое другое.

    Похожие уроки

    Урок был полезен?