Строки в Python: методы split, replace, strip, join, срезы и f-строки
Строка в Python (тип str) — неизменяемая последовательность символов Unicode. Метод split() разбивает строку на список, join() склеивает список обратно, replace() заменяет подстроку, strip() убирает пробелы по краям; каждый метод возвращает новую строку. Подставлять значения удобнее всего f-строкой: f"{name}: {price:.2f}".
Строки в Python встречаются в любой программе: ввод пользователя, имена файлов, строки CSV, ответы API. Тип str хранит текст в Unicode, поэтому кириллица и эмодзи работают без настроек. Самые востребованные методы — split, replace, strip и join, а выводить значения удобнее всего f-строками. Разберём всё это на примерах.
Как устроена строка в Python
Строку записывают в одинарных или двойных кавычках — разницы нет: 'кофе' и "кофе" одинаковы. Тройные кавычки создают многострочную строку, в которой переносы сохраняются как есть.
name = "Кофе"
note = """Первая строка
Вторая строка"""
print(len(name)) # 4 — длина строки в символах
Главное свойство строк — неизменяемость. Метод не меняет строку, а возвращает новую. Поэтому s.replace("a", "b") без присваивания ничего не даст — нужно писать s = s.replace("a", "b"). Это самая частая ошибка новичков.
Спецсимволы, перенос строки и сырые строки
Перевод строки обозначается \n, табуляция — \t, обратный слеш — \\. Префикс r делает строку «сырой»: обратные слеши в ней не обрабатываются. Это удобно для путей Windows и регулярных выражений.
print("Итого:\n350 ₽")
path = r"C:\new\table.csv" # \n и \t не превратятся в спецсимволы
Длинное выражение можно перенести на следующую строку кода, заключив его в скобки: соседние строковые литералы в скобках Python склеит сам.
split: разбить строку на список
Метод split() делит строку по разделителю и возвращает список. Без аргумента он режет по любым пробельным символам и игнорирует повторяющиеся пробелы — это удобно для разбора команд.
"add Кофе 250".split() # ['add', 'Кофе', '250']
"2026-10-16".split("-") # ['2026', '10', '16']
"a,b,,c".split(",") # ['a', 'b', '', 'c']
"key=value=x".split("=", 1) # ['key', 'value=x']
Обратите внимание на разницу: с явным разделителем пустые фрагменты сохраняются. Второй аргумент maxsplit ограничивает число разрезов, а rsplit() режет справа. Чтобы разбить текст на строки, используйте splitlines(): он понимает и \n, и \r\n и не оставляет пустого элемента в конце.
text = "кофе\nтакси\n"
text.split("\n") # ['кофе', 'такси', '']
text.splitlines() # ['кофе', 'такси']
join: склеить список в строку
join() — обратная операция. Вызывается он у строки-разделителя, а аргументом получает список строк:
items = ["кофе", "такси", "обед"]
print(", ".join(items)) # кофе, такси, обед
print("\n".join(items)) # каждый пункт с новой строки
Все элементы должны быть строками, иначе получите TypeError: sequence item 0: expected str instance, int found. Числа сначала преобразуйте: ", ".join(str(x) for x in amounts).
Конкатенация и объединение строк
Сложить две строки можно через +, повторить — через *: "-" * 20. Но склеивать сотни фрагментов в цикле через += медленно, потому что каждый раз создаётся новая строка. Соберите части в список и объедините одним join(). Сложить строку с числом напрямую нельзя: "Итого: " + 5 вызовет TypeError, нужна функция str() или f-строка.
replace: замена подстроки
replace(old, new) заменяет все вхождения подстроки. Третий аргумент ограничивает количество замен.
price = "1 250,50"
price = price.replace(" ", "").replace(",", ".")
print(float(price)) # 1250.5
"а-б-в".replace("-", "+", 1) # 'а+б-в'
Метод чувствителен к регистру и ищет точное совпадение. Для замен по шаблону (например, «все цифры») нужен модуль re и функция re.sub().
strip, lstrip, rstrip: обрезать строку
strip() убирает пробелы, табуляции и переносы строки с обоих краёв. lstrip() чистит только слева, rstrip() — только справа. Это первое, что стоит сделать с вводом пользователя и строками из файла.
raw = " Кофе \n"
raw.strip() # 'Кофе'
raw.rstrip() # ' Кофе'
"xxКофеxx".strip("x") # 'Кофе'
Аргумент задаёт набор символов, а не подстроку: "abcТекстcba".strip("abc") уберёт все a, b и c с краёв в любом порядке. Чтобы отрезать именно префикс или суффикс, используйте removeprefix() и removesuffix() (с Python 3.9).
Другие полезные методы строк
| Метод | Что делает | Пример → результат |
|---|---|---|
lower(), upper() | регистр | "Кофе".lower() → 'кофе' |
startswith(), endswith() | проверка начала и конца | "a.csv".endswith(".csv") → True |
find() | позиция подстроки или -1 | "кофе".find("ф") → 2 |
count() | число вхождений | "банан".count("а") → 2 |
isdigit() | только цифры? | "250".isdigit() → True |
zfill() | дополнить нулями | "7".zfill(3) → '007' |
Проверить, содержит ли строка подстроку, проще всего оператором in: if "кофе" in text.lower():. Строки сравниваются через == посимвольно и с учётом регистра; для сравнения без регистра приведите обе к casefold().
Срезы строк
Строка — последовательность, поэтому к символам можно обращаться по индексу с нуля, а отрицательный индекс считает с конца. Срез s[start:stop:step] возвращает подстроку; правая граница не включается.
s = "Python"
s[0] # 'P'
s[-1] # 'n'
s[0:3] # 'Pyt'
s[2:] # 'thon'
s[::2] # 'Pto'
s[::-1] # 'nohtyP' — перевернуть строку
Срез никогда не вызывает ошибку при выходе за границы: s[0:100] вернёт всю строку. А вот s[100] даст IndexError. Изменить символ по индексу нельзя (s[0] = "J" — TypeError), нужно собрать новую строку: "J" + s[1:].
f-строки в Python
Буква f перед строкой означает, что выражения в фигурных скобках будут вычислены и подставлены в текст. Это основной способ форматирования строк с Python 3.6: короче format() и быстрее старого оператора %.
item = "Кофе"
price = 250
print(f"{item}: {price} ₽") # Кофе: 250 ₽
print(f"Со скидкой: {price * 0.9} ₽") # Со скидкой: 225.0 ₽
print(f"{item=}") # item='Кофе' — удобно для отладки
Форматирование чисел и выравнивание
После двоеточия внутри скобок пишется спецификатор формата. Он задаёт округление, разделители разрядов, ширину и выравнивание:
| Запись | Результат | Смысл |
|---|---|---|
f"{3.14159:.2f}" | 3.14 | округление до 2 знаков |
f"{1250000:,}" | 1,250,000 | разделитель разрядов |
f"{1250000:_}" | 1_250_000 | подчёркивание вместо запятой |
f"{0.256:.1%}" | 25.6% | проценты |
f"{'кофе':<10}|" | кофе | | по левому краю, ширина 10 |
f"{250:>8}" | 250 | по правому краю |
f"{7:03d}" | 007 | дополнение нулями |
Выравнивание удобно для таблиц в терминале: f"{name:<12}{amount:>10.2f}" выстроит колонки ровно. Учтите, что форматирование нужно только при выводе. Деньги храните в копейках (int) или в Decimal, а не во float: 0.1 + 0.2 даёт 0.30000000000000004.
Кавычки и перенос строки внутри f-строки
С Python 3.12 (PEP 701) у f-строк появилась формальная грамматика: внутри фигурных скобок можно использовать те же кавычки, что и снаружи, обратные слеши и переносы, а вложенность больше не ограничена. Ошибки внутри скобок теперь показывают точную позицию. На старых версиях пишите внутри другой тип кавычек: f"{d['key']}", а перенос — через отдельную переменную или chr(10).
Для многострочного текста подходит f-строка в тройных кавычках: f"""Итого: {total}\nПозиций: {count}""".
format() и %: старые способы
В чужом коде встретятся "{}: {}".format(item, price) и "%s: %d" % (item, price). Спецификаторы у format() те же, что у f-строк. Метод format() до сих пор полезен, когда шаблон хранится отдельно от данных, например в конфиге.
Парсинг строки: практический пример
Соберём методы вместе. Допустим, из файла приходят строки вида " 2026-10-16; Кофе ; 250,50 \n", и нужно получить дату, название и сумму в копейках. Порядок обычный: очистить края, разрезать по разделителю, почистить каждую часть, привести типы.
line = " 2026-10-16; Кофе ; 250,50 \n"
date, item, raw_amount = [p.strip() for p in line.strip().split(";")]
amount_kop = round(float(raw_amount.replace(",", ".")) * 100)
print(date, item, amount_kop) # 2026-10-16 Кофе 25050
print(f"{item:<10}{amount_kop / 100:>10.2f}")
Если частей окажется не три, распаковка упадёт с ValueError: not enough values to unpack или too many values to unpack. В реальном коде такие строки стоит проверять заранее или ловить исключение. Для настоящих CSV-файлов с кавычками и экранированием лучше взять стандартный модуль csv, а не split.
Типичные ошибки со строками
- Результат метода не сохранён:
s.strip()без присваивания ничего не меняет. - join от списка чисел —
TypeError; сначалаmap(str, ...). - strip с подстрокой: аргумент — набор символов, для префикса нужен
removeprefix(). - Сравнение с учётом регистра:
"Кофе" == "кофе"—False. - Слеши в путях Windows без префикса
rпревращаются в спецсимволы.
t-строки: шаблон вместо готового текста
В Python 3.14 появились t-строки. Выглядят они как f-строки, только с префиксом t, но результат другой: не готовая строка, а объект string.templatelib.Template. В нём отдельно лежат куски текста (.strings) и подставленные значения (.values).
name = "<script>"
tpl = t"Привет, {name}!"
print(tpl.strings) # ('Привет, ', '!')
print(tpl.values) # ('<script>',)
Зачем это нужно: библиотека получает значения до склейки и может их обработать — экранировать угловые скобки в HTML или правильно передать параметры в SQL-запрос. f-строка такого шанса не даёт, она уже всё склеила. Для обычного вывода по-прежнему используйте f-строки.
Итог
Для повседневной работы со строками Python хватает небольшого набора: split() и join() разбирают и собирают текст, strip() чистит ввод, replace() заменяет фрагменты, срезы вырезают подстроки, а f-строки выводят значения с нужным форматом. Помните о неизменяемости: метод возвращает новую строку, её нужно сохранить. Строки, числа и f-строки на примере трекера расходов разобраны на практике в лекции курса по Python.
Частые вопросы
Как узнать длину строки в Python?
Функция len(s) возвращает число символов. Для кириллицы и эмодзи считаются символы Unicode, а не байты; размер в байтах даёт len(s.encode("utf-8")).
Как превратить число в строку и обратно?
str(250) даёт '250', а int("250") и float("2.5") — обратное преобразование. Если строка не похожа на число, int() вызовет ValueError, поэтому ввод стоит проверять.
Почему replace не меняет мою строку?
Строки неизменяемы, replace возвращает новую строку. Присвойте результат: s = s.replace("a", "b").
Как проверить, пустая ли строка?
Пустая строка ложна, поэтому достаточно if not s:. Если строка может состоять из пробелов, проверяйте if not s.strip():.
Чем t-строка отличается от f-строки?
f-строка сразу возвращает готовый str, а t-строка (Python 3.14+) — объект Template с отдельными кусками текста и значениями. Это позволяет безопасно экранировать данные для HTML и SQL.
Эта тема подробно разобрана с практикой в курсе «Python 3.15: от новичка до профи».
Перейти к курсу