Строковые данные в Python

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

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

Строки (тип str) — это последовательности символов, которые помогают хранить и обрабатывать текстовую информацию.

Как создавать строки в Python

Python предлагает несколько способов создания строк. Можно использовать одинарные, двойные или тройные кавычки:

Python 3.13
# Строки в одинарных кавычках
single_quotes = 'Привет, мир!'
print(single_quotes)
Привет, мир!
# Строки в двойных кавычках
double_quotes = "Hello, world"
print(double_quotes)
Hello, world
# Многострочные строки в тройных кавычках
multi_line = """Рецепт кофе:
1. Вскипятить воду
2. Залить молотый кофе
3. Подождать 4 минуты"""
print(multi_line)
Рецепт кофе:
1. Вскипятить воду
2. Залить молотый кофе
3. Подождать 4 минуты

Выбор типа кавычек зависит от ситуации:

  • Одинарные (') и двойные (") кавычки работают одинаково
  • Если в строке уже есть одинарные кавычки, удобнее обернуть её в двойные, и наоборот
  • Тройные кавычки (""" или ''') подходят для многострочного текста

Экранирование символов

Иногда нам нужно включить в строку особые символы, например, кавычки или перенос строки. Для этого используются последовательности с обратной косой чертой (\):

Python 3.13
# Использование кавычек внутри строк с экранированием
quote_inside = "Он сказал: \"Привет!\""
print(quote_inside)
Он сказал: "Привет!"
path = "C:\\Program Files\\Python"
print(path)
C:\Program Files\Python
# Часто используемые последовательности экранирования
newline = "Первая строка.\nВторая строка."  # \n - перенос строки
print(newline)
Первая строка.
Вторая строка.
tab = "Имя:\tИван"  # \t - табуляция
print(tab)
Имя:	Иван

Полезные последовательности экранирования:

  • \n для переноса строки
  • \t для табуляции
  • \\ для обратной косой черты
  • \' для одинарной кавычки
  • \" для двойной кавычки

Raw-строки для путей и регулярных выражений

Если вы работаете с путями к файлам или регулярными выражениями, постоянное экранирование обратных косых черт может быть утомительным. Python предлагает «сырые» (raw) строки с префиксом r:

Python 3.13
# Обычная строка требует двойного обратного слеша
normal_path = "C:\\Users\\Username\\Documents"
print(normal_path)
C:\Users\Username\Documents
# Raw-строка понимает обратные слеши буквально
raw_path = r"C:\Users\Username\Documents"
print(raw_path)
C:\Users\Username\Documents

Raw-строки упрощают работу с путями в Windows и с регулярными выражениями.

Неизменяемость строк

Строки в Python являются неизменяемыми (immutable). Это значит, что после создания строки её нельзя поменять «на месте»: любая операция, которая выглядит как изменение, на самом деле создаёт новую строку.

Попытка изменить символ по индексу падает с ошибкой:

Python 3.13
language = "Python"

try:
    language[0] = "J"
except TypeError as e:
    print(f"Ошибка: {e}")
Ошибка: 'str' object does not support item assignment

Чтобы получить «изменённую» строку, нужно собрать новую и присвоить её — либо в ту же переменную, либо в другую:

Python 3.13
language = "Python"
language = "J" + "ython"
print(language)
Jython

Это правило касается всех операций над строками: +, .upper(), .replace() и другие возвращают новую строку, а не меняют исходную.

Основные операции со строками

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

Строки можно складывать с помощью оператора +, чтобы создавать новые строки:

Python 3.13
first_name = "Иван"
last_name = "Петров"
full_name = first_name + " " + last_name
print(full_name)
Иван Петров
greeting = "Привет, " + full_name + "!"
print(greeting)
Привет, Иван Петров!

Повторение строк

С помощью оператора * можно повторить строку несколько раз:

Python 3.13
border = "=" * 20
print(border)
====================

Длина строки

Количество символов в строке узнаём через встроенную функцию len():

Python 3.13
word = "Python"
print(len(word))
6
empty = ""
print(len(empty))
0

Доступ к отдельным символам

В строке к каждому символу можно обратиться по его позиции (индексу). Индексация начинается с 0, а отрицательные индексы отсчитываются с конца:

Индексы строки Python: положительные 0–5 над буквами, отрицательные -6…-1 под ними. Срез word[1:4] выделяет y, t, h

Python 3.13
word = "Python"
first_letter = word[0]
second_letter = word[1]
last_letter = word[5]

print(f"Первая буква: {first_letter}")
print(f"Вторая буква: {second_letter}")
print(f"Последняя буква: {last_letter}")
Первая буква: P
Вторая буква: y
Последняя буква: n
# Можно также использовать отрицательные индексы для отсчета с конца
last_letter = word[-1]
second_last_letter = word[-2]
print(f"Последняя буква (с конца): {last_letter}")
print(f"Предпоследняя буква: {second_last_letter}")
Последняя буква (с конца): n
Предпоследняя буква: o

Получение части строки (срезы)

В Python есть мощный приём для работы со строками: срезы (slices). Они позволяют извлекать подстроки, указывая начальный и конечный индексы:

Python 3.13
message = "Python Programming"

# Синтаксис среза: строка[начало:конец:шаг]
# начало включается, конец исключается

first_word = message[0:6]     # первые 6 символов
print(f"Первое слово: {first_word}")
Первое слово: Python
second_word = message[7:]      # от 7-го до конца
print(f"Второе слово: {second_word}")
Второе слово: Programming
prefix = message[:6]           # от начала до 6-го (не включая 6-й)
print(f"Префикс: {prefix}")
Префикс: Python
every_second = message[::2]    # каждый второй символ
print(f"Каждая вторая буква: {every_second}")
Каждая вторая буква: Pto rgamn
reversed_string = message[::-1]  # строка задом наперед
print(f"В обратном порядке: {reversed_string}")
В обратном порядке: gnimmargorP nohtyP

Срезы гибкие:

  • Если не указать начальный индекс, срез начнется с начала строки
  • Если не указать конечный индекс, срез продолжится до конца строки
  • Отрицательный шаг позволяет обходить строку в обратном порядке

Полезные методы для работы со строками

Python предоставляет множество встроенных методов для работы со строками. Рассмотрим самые полезные.

Изменение регистра текста

Python 3.13
text = "Hello PYTHON world"

upper_case = text.upper()
print(f"Верхний регистр: {upper_case}")
Верхний регистр: HELLO PYTHON WORLD
lower_case = text.lower()
print(f"Нижний регистр: {lower_case}")
Нижний регистр: hello python world
title_case = text.title()
print(f"Каждое слово с заглавной: {title_case}")
Каждое слово с заглавной: Hello Python World
capitalized = text.capitalize()
print(f"Только первая буква заглавная: {capitalized}")
Только первая буква заглавная: Hello python world

Поиск и замена в строках

Python 3.13
text = "Python это отличный язык программирования"

# Поиск подстроки
position = text.find("отличный")
print(f"Слово 'отличный' начинается с позиции: {position}")
Слово 'отличный' начинается с позиции: 12
count = text.count("о")
print(f"Буква 'о' встречается {count} раза")
Буква 'о' встречается 4 раза
# Проверка начала и конца строки
starts_with = text.startswith("Python")
print(f"Строка начинается с 'Python': {starts_with}")
Строка начинается с 'Python': True
ends_with = text.endswith("!")
print(f"Строка заканчивается на '!': {ends_with}")
Строка заканчивается на '!': False
# Проверка наличия подстроки
contains = "отличный" in text
print(f"Строка содержит слово 'отличный': {contains}")
Строка содержит слово 'отличный': True
# Замена подстрок
new_text = text.replace("отличный", "прекрасный")
print(f"Текст после замены: {new_text}")
Текст после замены: Python это прекрасный язык программирования

Разделение и объединение строк

Python 3.13
# Разделение строки на список слов
sentence = "Python это отличный язык программирования"
words = sentence.split()
print(f"Список слов: {words}")
Список слов: ['Python', 'это', 'отличный', 'язык', 'программирования']
# Разделение по конкретному разделителю
csv_data = "яблоко,банан,вишня"
fruits = csv_data.split(",")
print(f"Список фруктов: {fruits}")
Список фруктов: ['яблоко', 'банан', 'вишня']
# Объединение списка в строку
words_to_join = ["Python", "это", "здорово"]
joined_sentence = " ".join(words_to_join)
print(f"Объединенное предложение: {joined_sentence}")
Объединенное предложение: Python это здорово
# Объединение с другим разделителем
path_parts = ["C:", "Users", "Username", "Documents"]
path = "\\".join(path_parts)
print(f"Путь к файлу: {path}")
Путь к файлу: C:\Users\Username\Documents

Удаление лишних символов

Для очистки текста от лишних пробелов или других символов:

Python 3.13
text_with_spaces = "   Python   "

# Удаление пробелов с обоих концов
cleaned = text_with_spaces.strip()
print(f"Без пробелов: '{cleaned}'")
Без пробелов: 'Python'
left_cleaned = text_with_spaces.lstrip()
print(f"Без пробелов слева: '{left_cleaned}'")
Без пробелов слева: 'Python   '
right_cleaned = text_with_spaces.rstrip()
print(f"Без пробелов справа: '{right_cleaned}'")
Без пробелов справа: '   Python'
# Удаление конкретных символов
text_with_dots = "...Python..."
without_dots = text_with_dots.strip('.')
print(f"Без точек: '{without_dots}'")
Без точек: 'Python'

Цепочки методов

Каждый строковый метод возвращает новую строку (помним про неизменяемость). А значит, их можно вызывать подряд через точку — результат одного сразу передаётся следующему. Это называется цепочкой методов.

Например, нужно нормализовать пользовательский ввод: убрать лишние пробелы по краям и привести к нижнему регистру.

В три шага через временные переменные:

Python 3.13
raw_input = "  Hello  "
without_spaces = raw_input.strip()
normalized = without_spaces.lower()

Цепочкой в одну строку:

Python 3.13
raw_input = "  Hello  "
normalized = raw_input.strip().lower()
print(f"'{normalized}'")
'hello'

Цепочки работают, потому что после strip() мы получаем новую строку, у которой тут же вызывается lower(). Это типичный паттерн Python-кода: вместо ведра промежуточных переменных — одна выразительная цепочка.

Форматирование строк

Часто нужно вставлять значения переменных в текст. В современном Python для этого используют f-строки:

Python 3.13
name = "Анна"
age = 25

# Просто добавьте 'f' перед строкой и вставляйте переменные в {}
greeting = f"Привет, меня зовут {name} и мне {age} лет."
print(greeting)
Привет, меня зовут Анна и мне 25 лет.
# Внутри {} можно вставлять любые выражения
price = 19.99
quantity = 3
total = f"Итого: {price * quantity:.2f} руб."
print(total)
Итого: 59.97 руб.

Помимо f-строк существуют ещё два способа форматирования, которые встречаются в старом коде: метод "...".format(...) и оператор "..." % (...). В новом коде их обычно не используют: f-строки проще и быстрее.

Проверка понимания

Давайте проверим, насколько хорошо вы поняли работу со строками:

Что будет результатом выполнения следующего кода?

Python 3.13
text = "Python"
result = text[1:4]