Строка (тип str) — один из самых часто используемых типов данных в Python. С ней работают почти в каждом скрипте: выводят сообщения, парсят файлы, обрабатывают пользовательский ввод, формируют запросы к API. В этой статье разберём базовые и полезные приёмы работы со строками: конкатенацию (склеивание), срезы (нарезку) и поиск подстрок. Всё — с примерами и типичными нюансами.
Что такое строка в Python
Строка — это последовательность символов в кавычках. Python поддерживает одинарные, двойные и тройные кавычки:
s1 = 'Привет' s2 = "Мир" s3 = '''Многострочный текст'''
Строки в Python неизменяемы: нельзя поменять один символ «по месту». Если нужно изменить строку, создают новую.
Склеивание строк (конкатенация)
Самый простой способ — оператор +:
first = "Hello" second = "World" result = first + " " + second print(result) # Hello World
Нюанс с типами
Склеивать можно только строки. Если есть число, его нужно явно преобразовать:
age = 27 message = "Мне " + str(age) + " лет" print(message) # Мне 27 лет
f‑строки (рекомендуемый способ)
Для читаемости и производительности лучше использовать f‑строки:
name = "Анна" age = 27 message = f"Меня зовут {name}, мне {age} лет." print(message)
Они удобны тем, что внутри фигурных скобок можно писать выражения:
price = 199.9 discount = 0.1 final = f"Цена со скидкой: {price * (1 - discount):.2f} руб." print(final) # Цена со скидкой: 179.91 руб.

Часть :.2f — форматирование числа до двух знаков после запятой.
Склеивание списка строк: join()
Если нужно объединить много строк (например, элементы списка) — используйте join():
words = ["Python", "это", "удобно"] sentence = " ".join(words) print(sentence) # Python это удобно
join() эффективнее, чем цикл с +, особенно на больших данных.
Пример с разделителем:
numbers = ["1", "2", "3", "4"] csv_line = ",".join(numbers) print(csv_line) # 1,2,3,4
Нарезка строк: срезы (slicing)
Срезы позволяют брать часть строки по индексам. Синтаксис: s[start:stop:step].
Индексация в Python начинается с 0. Отрицательные индексы идут с конца: -1 — последний символ.
text = "Python" print(text[0]) # P print(text[-1]) # n
Примеры срезов
text = "Программирование" # От 0 до 4 (не включая 4) print(text[:4]) # «Прог» # С 3 до конца print(text[3:]) # «раммирование» # Последние 3 символа print(text[-3:]) # «ние» # Каждый второй символ print(text[::2]) # «Пргрмрвне» # В обратном порядке print(text[::-1]) # «енорммормаргоргмоР»

Важно: stop не включается в результат. То есть text[0:3] — это символы с индексами 0, 1, 2.
Практический пример: извлечь расширение файла
filename = "report.pdf" extension = filename[-3:] print(extension) # pdf
Более надёжный способ — использовать os.path.splitext, но срез удобен для простых случаев.
Поиск подстрок
Оператор in
Проверяет наличие подстроки:
text = "Привет, мир!" if "мир" in text: print("Подстрока найдена")
Результат — булево значение (True/False).
Метод find()
Возвращает индекс первого вхождения подстроки или -1, если не найдено:
text = "abcdefg" pos = text.find("cd") print(pos) # 2 pos_missing = text.find("xyz") print(pos_missing) # -1
Можно указать диапазон поиска:
pos = text.find("d", 3) # искать начиная с индекса 3
Метод index()
Похож на find(), но выбрасывает исключение ValueError, если подстрока не найдена:
try: pos = text.index("xyz") except ValueError: print("Не найдено")
Используйте find(), если отсутствие подстроки — нормальная ситуация; index() — если это ошибка.
Методы startswith() и endswith()
Удобны для проверки формата строки:
url = "https://example.com" if url.startswith("https://"): print("Безопасный протокол") filename = "data.csv" if filename.endswith(".csv"): print("Это CSV-файл")
Подсчёт вхождений: count()
text = "abracadabra" c = text.count("a") print(c) # 5
Замена и очистка: replace(), strip(), split()
Замена подстроки
text = "яблоко, груша, яблоко" new_text = text.replace("яблоко", "манго") print(new_text) # манго, груша, манго
Можно ограничить количество замен:
new_text_limited = text.replace("яблоко", "манго", 1) # манго, груша, яблоко
Удаление лишних пробелов
s = " привет " print(s.strip()) # «привет» print(s.lstrip()) # слева print(s.rstrip()) # справа
Разбиение строки на части: split()
line = "Иван;Петров;30" parts = line.split(";") print(parts) # ['Иван', 'Петров', '30']
Без аргументов split() разбивает по любым пробельным символам:
sentence = "один два три" words = sentence.split() print(words) # ['один', 'два', 'три']
Практический пример: разбор строки лога
Допустим, у нас есть строка лога:
2026-07-31 14:22:10 INFO Пользователь: anna_login Действие: вход
Нужно извлечь дату, уровень, пользователя и действие.
log_line = "2026-07-31 14:22:10 INFO Пользователь: anna_login Действие: вход" # Дата и время (первые 19 символов) timestamp = log_line[:19] # Остаток строки без даты/времени rest = log_line[20:] # Разделим по пробелам, чтобы найти уровень (INFO) parts = rest.split() level = parts[0] # Дальше ищем ключевые слова user_marker = "Пользователь: " action_marker = "Действие: " user_start = rest.find(user_marker) + len(user_marker) user_end = rest.find(" ", user_start) # до следующего пробела user = rest[user_start:user_end] action_start = rest.find(action_marker) + len(action_marker) action = rest[action_start:] print("Дата/время:", timestamp) print("Уровень:", level) print("Пользователь:", user) print("Действие:", action)
Вывод:
Дата/время: 2026-07-31 14:22:10
Уровень: INFO
Пользователь: anna_login
Действие: вход

Это простой пример, показывающий, как комбинировать срезы, поиск и разбиение. В реальных задачах часто используют регулярные выражения, но для многих кейсов хватает базовых методов.
Краткая шпаргалка
- Нужна читаемая подстановка значений — берите f‑строки.
- Нужно склеить список строк — используйте
join(). - Нужен быстрый поиск наличия подстроки —
in. - Нужен индекс подстроки и допустимо
-1при отсутствии —find(). - Нужна проверка начала/конца строки —
startswith()/endswith(). - Нужно разбить строку на части —
split(). - Нужно заменить подстроку —
replace().
