Python работа со строками
Строки обрабатываются почти в каждой программе: ввод пользователя, имена файлов, ответы сервера, отчеты. На этой странице вы научитесь создавать строки, обращаться к символам по индексу, брать срезы, склеивать, искать подстроки и форматировать вывод.
Примеры проверены на Python 3.12 и 3.13. В новом разделе собраны приемы, которые отличают аккуратный код: срезы с шагом, быстрая склейка через join, удаление префикса без ошибок, raw-строки для путей Windows и возможности f-строк, расширенные в версии 3.12.

Содержание статьи
- Строка в python - что такое?
- Как создать строку в Python?
- Как получить доступ к символам в строке?
- Как изменить или удалить строку?
- Строковые операции в Python
- Проверка на наличие символа
- Форматирование строк в Python
- Метод format() и f - строки для форматирования строк
- Самые популярные методы строк
- Приемы со строками, которые пригодятся каждый день
- Частые вопросы
В этой статье мы с вами научимся создавать, форматировать, изменять, и удалять строки в Python. По мимо этого, мы с вами разберем различного рода операции со строками.
Строка в python - что такое?
Строка - ничто иное как последовательность символов. В Python работа со строками, организована довольно удобно. Как и с остальными типами данных, мы поверхностно уже разбирали работу со строками, а сегодня мы немного углубимся в эту тему.
Как создать строку в Python?
Строки в Python заключаются в кавычки (одинарные, двойные), и даже можно заключать в тройные кавычки, правда на практике тройные кавычки используются для документационных строк. Рассмотрим пример создания строки, и пошагово пройдемся по основным методам.
str = 'Hello'
str2 = "Hello"
str3 = '''Hello'''
str4 = """Привет, добро пожаловать в мир чудес и магии
под названием Python"""
print(str,str2,str3,str4)
Результат:
Hello
Hello
Hello
Привет, добро пожаловать в мир чудес и магии
под названием Python
Как получить доступ к символам в строке?
Как и со списками и с кортежами, мы можем получить доступ к символам в строке с помощью индексации. Мы можем получить доступ как к отдельному символу, так и к к ряду символов, счет индекса начинается с нуля. При поптыке получить доступ к символу, который находится вне диапазона строки, Python выдаст ошибку IndexError.
Python так же допускает отрицательную индексацию. Индекс -1 будет равен последнему символу, -2 будет равен предпоследнему символу и так далее. К диапазону элементов, мы получаем доступ, с помощью знакомых нам уже срезов :.
str = "pydocs"
print(str)
print(str[0])
print(str[-1])
print(str[1:5])
print(str[4:2])
Результат:
pydocs
p
s
ydocs
cs
Срезы лучше всего понять, когда есть визуализация происходящего, ниже уже знакомая вам визуализация.

Как изменить или удалить строку?
Как и в случае с кортежами, строки тоже являются неизменными, но мы можем изменить всю строку, путем переназначения строки в переменной.
str = "pydocs"
str[2] = "a"
Результат:
TypeError: 'str' object does not support item assignment
str = "pydocs"
str = "egesoch.cc"
Результат:
egesoch.cc
Удаление строки происходит с помощью ключевого слова del, мы не можем удалить конкретный символ, мы можем удалить только всю строку.
str = "pydocs"
del str[1]
TypeError: 'str' object doesn't support item deletion
del str
print(str)
Результат:
<class 'str'> (после del str снова доступен встроенный тип str)
Строковые операции в Python
Со строками в Python можно проводить множество операций, благодаря этому, этот тип данных, является наиболее часто используемым.
Конкатенация строк
Оператором + в Python можно сложить два и более строк. Оператором * можно воспользоваться, если нам необходимо повторить строку определенное количество раз.
str1 = "Hello"
str2="World"
print(str1 + str2)
Результат:
HelloWorld
print(str1 * 3)
Результат:
HelloHelloHello
Итерация по строке
Python так же позовляет проводить перебор строки, с помощью цикла for. Ниже приведен пример подсчета количества букв "o".
count = 0
for i in "Hello World":
if i == 'o':
count += 1
print(count, "символа найдено")
Результат:
2 символа найдено
Проверка на наличие символа
Мы можем проверить наличие символа в строке используя ключевое слово in.
"y" in "pydocs"
True
"da" not in "pydocs" (результат True)
False
Форматирование строк в Python
Представим себе ситуацию, где мы хотим распечатать текст Pyth'on - "Мир Магии" и волшебства. В тексте используются как одинарные, так и двойные кавычки, при попытке распечатки, это приведет к синтаксической ошибке. В Python конечно же это предусмотрено, и есть несколько вариантов обхода этой проблемы.
Во первых мы можем просто воспользоваться тройными кавычками """. Но чаще всего, вы будете встречаться с таким понятием как "Экранирование кавычек" - escape последовательность.Рассмотрим оба варианта:
print("""Pyth'on - "Мир Магии" и волшебства""")
print('Pyth\'on - "Мир Магии" и волшебства')
Ниже представлены команды для Escape последовательностей
| Escape последовательность | Описание |
| \новая строка | Игнорируется, строка продолжается на новой строке |
| \\ | Сам символ обратного слеша (остается один символ \) |
| \' | Апостроф (остается один ') |
| \" | Кавычка (остается один символ ") |
| \f | Форматированная строка |
| \n | Новая строка |
| \r | Возврат каретки |
| \t | Горизонтальная табуляция |
| \ооо | Символ с восьмеричным значением ооо |
| \xHH | Символ с шестнадцатеричным значением HH |
print(r"C:\Users\User\Desktop")
Результат:
C:\Users\User\Desktop
print("Это строка \n это новая строка")
Результат:
Это строка
это новая строка
Метод format() и f - строки для форматирования строк
Довольно часто в ходе программирования, вам придется распечатывать значения переменных, вместе со строками. Для этого используются форматированные строки. Рассмотрим пример вывода с использованием метода format() и f-строки.
name = "{},{} и {}".format("Тимур","Антон","Катя")
print(name)
Результат:
Тимур,Антон и Катя
name = "{s},{b} и {j}".format(j='Тимур', b='Антон', s = 'Катя')
print(name)
Результат:
Катя,Антон и Тимур
С реализацией метода format() думаю мы разобрались, теперь посмотрим, что из себя представляют f строки.
name = "Тимур"
age = 30
print(f"Меня зовут {name}. Мне {age} лет.")
Результат:
Меня зовут Тимур. Мне 30 лет.
На мой взгляд использование f- строк удобнее, и в большинстве случаев я именно так и делаю. Есть еще более старый метод форматирования строк, sprintf(), который использует оператор %, но я его специально не стал описывать.
Самые популярные методы строк
Операции над строками в Python, очень хорошо реализованы, и существо множество различных методов, о них можно почитать в официальной документации.
Вот некоторые, более часто используемые методы lower(), upper(),.join(), split(),find(), replace()
"Egesoch.CC".lower()
'egesoch.cc'
"Egesoch.CC".upper()
'EGESOCH.CC'
"Это мир магии и волшебства под названием Python".split()
['Это','мир','магии','и','волшебства','под','названием','Python',]
'Happy New Year'.find('ew')
7
'Happy New Year'.replace('Happy', 'Python')
'Python New Year'
Приемы со строками, которые пригодятся каждый день
В этом разделе: срезы с шагом и отрицательные индексы, склейка в цикле через join, удаление префикса и лишних пробелов, Raw-строки для путей и регулярных выражений, возможности f-строк.
Срезы с шагом и отрицательные индексы
s = "pydocs"
print(s[1:5]) # -> ydoc (символ с индексом 5 не входит)
print(s[-3:]) # -> ocs (последние три символа)
print(s[::2]) # -> pdc (каждый второй)
print(s[::-1]) # -> scodyp (разворот строки)
print(s[4:2]) # -> пустая строка, начало правее конца
Срез никогда не вызывает IndexError: если границы выходят за строку, Python просто обрежет их. Ошибку дает только обращение к одному символу, например s[10].
Склейка в цикле через join
Строки неизменяемы, поэтому result += part в цикле каждый раз создает новую строку. На тысячах фрагментов это заметно медленнее. Собирайте части в список и склеивайте один раз. Метод join() вызывается у строки-разделителя и принимает любой итерируемый объект, но все его элементы должны быть строками: числа сначала преобразуйте через str(), иначе получите TypeError. Обратная операция выполняется методом split(): без аргументов он делит текст по любым пробелам, а с аргументом по указанному разделителю, например "a;b;c".split(";").
words = ["Python", "3.13", "строки"]
print(" ".join(words)) # -> Python 3.13 строки
print(", ".join(str(n) for n in range(5))) # -> 0, 1, 2, 3, 4
Удаление префикса и лишних пробелов
name = " report_2026.csv\n"
clean = name.strip() # -> 'report_2026.csv'
print(clean.removesuffix(".csv")) # -> report_2026
print("www.site.ru".removeprefix("www.")) # -> site.ru
print("www.site.ru".lstrip("w.")) # -> site.ru, но...
print("web.ru".lstrip("w.")) # -> eb.ru
lstrip() и rstrip() удаляют любые символы из набора, а не подстроку целиком. Для приставок и окончаний используйте removeprefix() и removesuffix().
Raw-строки для путей и регулярных выражений
В обычной строке "C:\Users" последовательность \U считается началом кода Unicode, и Python выдаст SyntaxError. Префикс r отключает обработку обратной косой черты: r"C:\Users\User\Desktop". Для путей еще удобнее модуль pathlib. Учтите, что raw-строка не может заканчиваться одиночной обратной косой чертой.
Возможности f-строк
price, item = 1234.5, "чайник"
print(f"{item:>10}|") # -> чайник|
print(f"{price:,.2f}") # -> 1,234.50
print(f"{price=}") # -> price=1234.5
users = {"name": "Тимур"}
print(f"{users["name"]}") # с Python 3.12 кавычки внутри можно повторять
| Задача | Метод | Пример результата |
|---|---|---|
| Начинается ли строка с подстроки | s.startswith("http") | True |
| Позиция подстроки без ошибки | s.find("x") | -1, если нет |
| Сколько раз встречается | s.count("o") | число вхождений |
| Только ли цифры | s.isdigit() | True или False |
| Сравнение без учета регистра | a.casefold() == b.casefold() | True или False |
Подробнее о форматировании читайте в статье f-строки в Python.
Частые вопросы
Несколько вопросов, которые часто задают начинающие, и ответы на них.
Как изменить один символ в строке?
Напрямую нельзя, строки неизменяемы. Соберите новую строку из срезов: s = s[:2] + "a" + s[3:], или используйте replace(), если нужно заменить все вхождения подстроки.
Чем find() отличается от index()?
Оба метода возвращают позицию первого вхождения. Если подстроки нет, find() вернет -1, а index() выбросит ValueError. Для простой проверки наличия удобнее оператор in.
Как перевернуть строку в Python?
Срезом с отрицательным шагом: s[::-1]. Вариант "".join(reversed(s)) дает тот же результат, но длиннее и медленнее.
Почему print со строкой вида C:\new выводит перенос строки?
Сочетание \n внутри обычной строки превращается в символ новой строки. Удвойте обратную косую черту ("C:\\new"), используйте raw-строку r"C:\new" или прямые слеши, которые Windows тоже понимает.