Строки в Python: как склеивать, резать и искать подстроки — практические приёмы

Строка (тип str) — один из самых часто используемых типов данных в Python. С ней работают почти в каждом скрипте: выводят сообщения, парсят файлы, обрабатывают пользовательский ввод, формируют запросы к API. В этой статье разберём базовые и полезные приёмы работы со строками: конкатенацию (склеивание), срезы (нарезку) и поиск подстрок. Всё — с примерами и типичными нюансами.


Что такое строка в Python

Строка — это последовательность символов в кавычках. Python поддерживает одинарные, двойные и тройные кавычки:

python
s1 = 'Привет'
s2 = "Мир"
s3 = '''Многострочный
текст'''

Строки в Python неизменяемы: нельзя поменять один символ «по месту». Если нужно изменить строку, создают новую.


Склеивание строк (конкатенация)

Самый простой способ — оператор +:

python
first = "Hello"
second = "World"
result = first + " " + second
print(result)  # Hello World

Нюанс с типами

Склеивать можно только строки. Если есть число, его нужно явно преобразовать:

python
age = 27
message = "Мне " + str(age) + " лет"
print(message)  # Мне 27 лет

f‑строки (рекомендуемый способ)

Для читаемости и производительности лучше использовать f‑строки:

python
name = "Анна"
age = 27
message = f"Меня зовут {name}, мне {age} лет."
print(message)

Они удобны тем, что внутри фигурных скобок можно писать выражения:

python
price = 199.9
discount = 0.1
final = f"Цена со скидкой: {price * (1 - discount):.2f} руб."
print(final)  # Цена со скидкой: 179.91 руб.

Часть :.2f — форматирование числа до двух знаков после запятой.

Склеивание списка строк: join()

Если нужно объединить много строк (например, элементы списка) — используйте join():

python
words = ["Python", "это", "удобно"]
sentence = " ".join(words)
print(sentence)  # Python это удобно

join() эффективнее, чем цикл с +, особенно на больших данных.

Пример с разделителем:

python
numbers = ["1", "2", "3", "4"]
csv_line = ",".join(numbers)
print(csv_line)  # 1,2,3,4

Нарезка строк: срезы (slicing)

Срезы позволяют брать часть строки по индексам. Синтаксис: s[start:stop:step].

Индексация в Python начинается с 0. Отрицательные индексы идут с конца: -1 — последний символ.

python
text = "Python"
print(text[0])      # P
print(text[-1])     # n

Примеры срезов

python
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.

Практический пример: извлечь расширение файла

python
filename = "report.pdf"
extension = filename[-3:]
print(extension)  # pdf

Более надёжный способ — использовать os.path.splitext, но срез удобен для простых случаев.


Поиск подстрок

Оператор in

Проверяет наличие подстроки:

python
text = "Привет, мир!"
if "мир" in text:
    print("Подстрока найдена")

Результат — булево значение (True/False).

Метод find()

Возвращает индекс первого вхождения подстроки или -1, если не найдено:

python
text = "abcdefg"
pos = text.find("cd")
print(pos)  # 2
 
pos_missing = text.find("xyz")
print(pos_missing)  # -1

Можно указать диапазон поиска:

python
pos = text.find("d", 3)  # искать начиная с индекса 3

Метод index()

Похож на find(), но выбрасывает исключение ValueError, если подстрока не найдена:

python
try:
    pos = text.index("xyz")
except ValueError:
    print("Не найдено")

Используйте find(), если отсутствие подстроки — нормальная ситуация; index() — если это ошибка.

Методы startswith() и endswith()

Удобны для проверки формата строки:

python
url = "https://example.com"
if url.startswith("https://"):
    print("Безопасный протокол")
 
filename = "data.csv"
if filename.endswith(".csv"):
    print("Это CSV-файл")

Подсчёт вхождений: count()

python
text = "abracadabra"
c = text.count("a")
print(c)  # 5

Замена и очистка: replace(), strip(), split()

Замена подстроки

python
text = "яблоко, груша, яблоко"
new_text = text.replace("яблоко", "манго")
print(new_text)  # манго, груша, манго

Можно ограничить количество замен:

python
new_text_limited = text.replace("яблоко", "манго", 1)
# манго, груша, яблоко

Удаление лишних пробелов

python
s = "  привет   "
print(s.strip())      # «привет»
print(s.lstrip())     # слева
print(s.rstrip())     # справа

Разбиение строки на части: split()

python
line = "Иван;Петров;30"
parts = line.split(";")
print(parts)  # ['Иван', 'Петров', '30']

Без аргументов split() разбивает по любым пробельным символам:

python
sentence = "один два   три"
words = sentence.split()
print(words)  # ['один', 'два', 'три']

Практический пример: разбор строки лога

Допустим, у нас есть строка лога:

text
2026-07-31 14:22:10 INFO Пользователь: anna_login Действие: вход

Нужно извлечь дату, уровень, пользователя и действие.

python
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)

Вывод:

text
Дата/время: 2026-07-31 14:22:10
Уровень: INFO
Пользователь: anna_login
Действие: вход

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


Краткая шпаргалка

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

Добавить комментарий