Работа со строками в Python: короткая инструкция
За полчаса вы научитесь разбирать, склеивать, форматировать и очищать строки в Python 3.12 — с рабочими примерами, которые можно скопировать и запустить.

К концу этого материала вы сможете разрезать строку на части, склеить список в одну строку, вставить значения через f-строки и убрать лишние пробелы — то есть закрыть 90% задач, которые встречаются при парсинге ввода, чтении файлов и формировании текста. На всё уйдёт около 30 минут, если пробовать каждый пример в интерпретаторе.
Всё написано для Python 3.12, но большинство приёмов работает начиная с 3.6 — там, где версия важна, я отмечаю это отдельно.
Что нужно иметь до начала
- Установленный Python 3.10 или новее. Проверьте командой
python --versionв терминале — должна вывестись строка видаPython 3.12.4. - Любой редактор или сам интерпретатор. Для проб удобнее запустить
pythonбез аргументов — откроется интерактивная оболочка, где виден результат каждой строки. - Ничего устанавливать через pip не нужно: всё, что здесь используется, входит в стандартную поставку языка.
Одно ключевое свойство, из которого растёт всё остальное: строки в Python неизменяемы. Ни один метод не меняет исходную строку — он возвращает новую. Поэтому результат нужно присваивать переменной, иначе он потеряется.
Шаг 1. Создать строку и заглянуть внутрь
Строку можно записать в одинарных, двойных или тройных кавычках. Тройные удобны для многострочного текста.
text = "Привет, мир"
multiline = """Первая строка
Вторая строка"""
# Обращение к символу по индексу — с нуля
print(text[0]) # П
print(text[-1]) # р (последний символ)
print(len(text)) # 11
Проверка: в оболочке после print(text[0]) должна появиться буква П. Если вместо этого вы видите IndexError: string index out of range, значит индекс больше длины строки.
Шаг 2. Вырезать часть строки — срезы
Срез [start:stop:step] берёт часть строки. Верхняя граница не включается.
date = "2024-11-25"
year = date[0:4] # "2024"
month = date[5:7] # "11"
reversed_text = date[::-1] # "52-11-4202"
print(year, month)
Проверка: вывод должен быть 2024 11. Срез никогда не выбрасывает ошибку выхода за границу — если stop больше длины, вернётся всё до конца.
Шаг 3. Разбить строку на части и собрать обратно
Метод split() режет строку по разделителю в список. Метод join() делает обратное — склеивает список в строку. Обратите внимание: join() вызывается у разделителя, а не у списка.
raw = "яблоко,груша,слива"
fruits = raw.split(",")
# ['яблоко', 'груша', 'слива']
result = " | ".join(fruits)
# "яблоко | груша | слива"
# split() без аргумента режет по любым пробелам и отбрасывает пустые куски
words = " много пробелов тут ".split()
# ['много', 'пробелов', 'тут']
print(result)
Проверка: вывод — яблоко | груша | слива. Если получаете TypeError: sequence item 0: expected str instance, int found, значит в списке лежат числа — join() работает только со строками, приведите элементы через map(str, ...).
Шаг 4. Убрать лишние пробелы и мусор по краям
Классика при чтении пользовательского ввода — невидимые пробелы и символ перевода строки в конце.
user_input = " admin@example.com\n"
clean = user_input.strip() # "admin@example.com"
left = user_input.lstrip() # убрать только слева
right = user_input.rstrip() # убрать только справа
# strip умеет убирать не только пробелы, но и заданные символы
print("###заголовок###".strip("#")) # "заголовок"
Проверка: len(clean) должно вернуть 17, тогда как исходная строка длиннее из-за пробелов и \n.
Шаг 5. Вставить значения через f-строки
f-строки (доступны с Python 3.6) — самый читаемый способ подставить переменные в текст. Ставите букву f перед кавычкой и пишете выражения в фигурных скобках.
name = "Анна"
age = 30
price = 1499.5
greeting = f"{name}, вам {age} лет"
# "Анна, вам 30 лет"
# Форматирование числа: два знака после запятой
label = f"Итого: {price:.2f} руб"
# "Итого: 1499.50 руб"
# Отладочный вывод имя=значение (с Python 3.8)
print(f"{age=}") # age=30
Проверка: в label должно быть ровно два знака после запятой — 1499.50 руб. Если увидели фигурные скобки в выводе как есть, вы забыли букву f перед кавычкой.
Строки неизменяемы. Каждый вызовstrip(),replace()илиupper()возвращает новую строку — если результат никуда не присвоить, работа метода пропадёт впустую.
Шаг 6. Найти и заменить
message = "ошибка: файл не найден"
# Проверка вхождения — самый частый приём
if "ошибка" in message:
print("Это сообщение об ошибке")
# Замена подстроки
fixed = message.replace("ошибка", "warning")
# "warning: файл не найден"
# Позиция первого вхождения; find вернёт -1, если не найдено
position = message.find("файл") # 8
# Проверка начала и конца
print("log.txt".endswith(".txt")) # True
print("https://".startswith("http")) # True
Проверка: первый print выведет Это сообщение об ошибке. Разница между find() и index(): первый при отсутствии подстроки возвращает -1, второй бросает ValueError.
Полезные методы одним взглядом
| Метод | Что делает | Пример результата |
|---|---|---|
upper() / lower() | Регистр букв | "АБВ" / "абв" |
capitalize() | Первая буква заглавная, остальные строчные | "Привет мир" |
title() | Каждое слово с заглавной | "Привет Мир" |
isdigit() | Строка состоит только из цифр | True / False |
count(x) | Сколько раз встречается подстрока | 3 |
zfill(n) | Дополнить нулями слева до длины n | "007" |
Если не получилось
- TypeError: can only concatenate str (not "int") to str — вы пытаетесь сложить строку и число через
+. Приведите число к строке:"Возраст: " + str(age)или используйте f-строку. - AttributeError: 'str' object has no attribute 'append' — методы списка к строке не применяются, потому что строка неизменяема. Соберите куски в список, потом склейте через
join(). - Строка не поменялась после replace() — вы не присвоили результат. Пишите
text = text.replace(...), а не простоtext.replace(...). - UnicodeDecodeError при чтении файла — файл в другой кодировке. Укажите её явно:
open("file.txt", encoding="utf-8"). - ValueError: substring not found — вы использовали
index()для отсутствующей подстроки. Замените наfind(), который вернёт-1, или сначала проверьте черезin.
Что дальше
Когда базовые операции перестанут вызывать вопросы, посмотрите в сторону трёх тем. Модуль re — для поиска по шаблону, когда простого split() и replace() уже мало. Метод str.format_map() и шаблоны string.Template — для подстановки из словарей. И разница между bytes и str — она всплывёт, как только вы начнёте читать данные из сети или бинарных файлов. Полный список методов строк лежит в официальной документации, раздел Text Sequence Type — str.
Проектная работа: От проблемы до защиты: продукт, этапы, вопросы комиссии
Спросить за 15 ₽Источники: Python docs — Text Sequence Type str, Python docs — Formatted string literals (f-strings)
Частые вопросы
У меня Python 3.8, f-строки с =_работают?
Почему после text.strip() строка осталась с пробелами?
Чем отличается split() без аргумента от split(' ')?
Как склеить список чисел в строку через join()?
Что быстрее — конкатенация через + в цикле или join()?
Как проверить, что строка содержит только цифры, включая отрицательные?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.