Работа со строками: встроенные методы Python
Основные строковые методы
В Python строки являются неизменяемыми последовательностями символов. Для работы с ними существует множество встроенных методов. Рассмотрим наиболее полезные из них.
Как разбить строку на подстроки?
Основной метод - str.split(). Он разделяет строку по указанному разделителю и возвращает список строк.
text = "один,два,три"
result = text.split(",")
print(result)S split python (метод split() для строк python)
['один', 'два', 'три']
Upper lower python (методы upper и lower в python)
Если разделитель не указан, разбиение происходит по любым пробельным символам.
text = "один два три\nчетыре"
print(text.split())
Python str methods (строковые методы python)
['один', 'два', 'три', 'четыре']
Типичные ошибки
- Забывание указать разделитель, когда строка содержит запятые с пробелами - элементы будут содержать лишние пробелы.
- Попытка разбить пустую строку:
"".split()возвращает пустой список, а не список с пустой строкой.
Как объединить список строк в одну строку?
Метод str.join() объединяет элементы итерируемого объекта, вставляя между ними заданную строку-разделитель.
words = ["Python", "это", "круто"]
sentence = " ".join(words)
print(sentence)Python это круто
Типичная ошибка
Элементы должны быть строками. Если список содержит числа, потребуется преобразование: "".join(map(str, [1,2,3])).
Как изменить регистр символов строки?
Методы str.upper() и str.lower() возвращают копию строки в верхнем или нижнем регистре. Исходная строка не меняется.
name = "Python"
print(name.upper())
print(name.lower())PYTHON python
Типичная ошибка
Забывание, что строки неизменяемы: вызов name.upper() без присваивания не изменит переменную name.
Как удалить лишние пробелы в начале и конце строки?
Метод str.strip() удаляет пробельные символы (или указанную подстроку) с обоих концов. Аналоги lstrip() и rstrip() удаляют только слева или справа.
text = " привет "
print(text.strip())
print(text.lstrip())
print(text.rstrip())привет привет привет
Типичная ошибка
Использование strip() с аргументом - удаляются все символы из переданной строки, а не подстрока целиком.
Как заменить одну подстроку на другую?
Метод str.replace() заменяет все вхождения старой подстроки на новую. Можно указать максимальное количество замен.
text = "один, один, один"
print(text.replace("один", "раз"))
print(text.replace("один", "раз", 2))раз, раз, раз раз, раз, один
Типичная ошибка
Замена регистрозависима. Для регистронезависимой замены требуется предварительно привести строку к одному регистру или использовать регулярные выражения.
Как найти индекс первого вхождения подстроки?
Метод str.find() возвращает индекс начала подстроки или -1, если подстрока не найдена. Аналог index() вызывает исключение ValueError.
text = "Привет, мир!"
print(text.find("мир"))
print(text.find("Python"))8 -1
Типичная ошибка
Путать find() и index(). Если подстрока может отсутствовать, безопаснее использовать find().
Как проверить, начинается или заканчивается строка определенной подстрокой?
Методы str.startswith() и str.endswith() возвращают True или False. Можно передавать кортеж для проверки нескольких вариантов.
filename = "data.csv"
print(filename.startswith("data"))
print(filename.endswith((".csv", ".txt")))True True
Типичная ошибка
Передача одного строкового аргумента без кортежа для нескольких вариантов - проверка будет только по этой строке.
Как вставить значения в строку с форматированием?
Метод str.format() подставляет значения в места, обозначенные фигурными скобками. Поддерживает именованные и позиционные аргументы.
name = "Анна"
age = 25
text = "Меня зовут {name}, мне {age} лет."
print(text.format(name=name, age=age))Меня зовут Анна, мне 25 лет.
Типичная ошибка
Несоответствие количества аргументов и заполнителей. Python 3.6+ рекомендует использовать f-строки для простоты.
Как проверить, состоит ли строка только из цифр или букв?
Методы isdigit(), isalpha(), isalnum() и другие проверяют все символы строки.
print("123".isdigit())
print("abc".isalpha())
print("abc123".isalnum())
print("abc 123".isalnum())True True True False
Типичная ошибка
isalnum() возвращает False, если есть пробелы или знаки препинания. Для проверки на число с плавающей точкой эти методы не подходят.
Дополнительные примеры работы со строками
Транслитерация символов с помощью translate
Методы str.maketrans() и str.translate() позволяют заменить одни символы на другие.
table = str.maketrans("helo", "HELO")
print("hello world".translate(table))HELLO WORLD
Разделение строки на три части с partition
Метод str.partition() делит строку по первому вхождению разделителя и возвращает кортеж из трех элементов.
text = "Python - язык программирования"
print(text.partition(" - "))('Python', ' - ', 'язык программирования')Разбиение по символам перевода строки
Метод str.splitlines() разбивает строку по границам строк.
text = "строка1\nстрока2\r\nстрока3"
print(text.splitlines())['строка1', 'строка2', 'строка3']
Дополнение строки нулями слева
Метод str.zfill() добавляет нули в начало строки до указанной длины.
num = "42"
print(num.zfill(5))00042
Выравнивание строки по центру, левому и правому краю
Методы center(), ljust(), rjust() дополняют строку пробелами (или заданным символом) до нужной ширины.
text = "Python"
print(text.center(10, "*"))
print(text.ljust(10, "-"))
print(text.rjust(10, "_"))**Python** Python---- ____Python
Кодирование и декодирование строк
Методы encode() и decode() преобразуют строку в байтовое представление и обратно.
text = "Привет"
encoded = text.encode("utf-8")
print(encoded)
decoded = encoded.decode("utf-8")
print(decoded)b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' Привет
Подсчет вхождений подстроки
Метод str.count() возвращает количество непересекающихся вхождений подстроки.
text = "раз, два, раз, три"
print(text.count("раз"))2
Управление табуляцией с expandtabs
Метод str.expandtabs() заменяет символы табуляции на заданное количество пробелов.
text = "a\tb\tc"
print(text.expandtabs(10))a b c
Форматирование с использованием словаря
Метод str.format_map() принимает словарь, ключи которого используются как имена заполнителей.
data = {"name": "Иван", "age": 30}
template = "Имя: {name}, Возраст: {age}"
print(template.format_map(data))Имя: Иван, Возраст: 30
F-строки как альтернатива format
F-строки (Python 3.6+) позволяют вставлять выражения непосредственно в строку перед ее созданием.
name = "Мария"
age = 28
print(f"Имя: {name}, Возраст: {age}")Имя: Мария, Возраст: 28
Удаление префикса и суффикса (Python 3.9+)
Методы removeprefix() и removesuffix() удаляют указанную подстроку с начала или конца строки.
url = "https://example.com"
print(url.removeprefix("https://"))
print(url.removesuffix(".com"))example.com https://example
Преобразование регистра: capitalize, title, swapcase
Эти методы изменяют регистр строки специфическим образом.
text = "привет МИР"
print(text.capitalize())
print(text.title())
print(text.swapcase())Привет мир Привет Мир ПРИВЕТ мир