Django-Admin.ru

Строки в Python: методы и операции

Строки в Python (str): создание, перенос строки, срезы и подстроки, поиск, методы строк в таблице, удаление символов, список строк и подсчёт строк в тексте.

Редакция Django-Admin.ru
· обновлено · 10 мин чтения

Содержание · 14 разделов
  1. Как создать строку
  2. Новая строка и экранирование
  3. Как вывести строку: print
  4. Индексы и срезы: как получить подстроку
  5. Операции со строками
  6. Как найти подстроку в строке
  7. Методы строк Python: таблица
  8. Строки неизменяемы: как удалить символ или подстроку
  9. Массив строк: список строк
  10. Количество строк, символов и слов
  11. Перебор строки в цикле
  12. Частые ошибки
  13. TypeError: can only concatenate str (not “int”) to str
  14. Метод вызван, а строка не изменилась
  15. IndexError: string index out of range
  16. Проблемы с обратной косой чертой
  17. Частые вопросы
  18. Как проверить, что строка пустая?
  19. Как сделать заглавной только первую букву?
  20. Как получить код символа и символ по коду?
  21. Как перевести строку в байты и обратно?
  22. Как оставить в строке только цифры?
  23. Итог

Строка в Python — это тип str: неизменяемая последовательность символов Unicode. Короткий ответ: строка создаётся в кавычках ("Python" или 'Python'), символ берётся по индексу s[0], подстрока — срезом s[1:4], а методы строк вроде upper(), replace() и split() всегда возвращают новую строку и не меняют исходную.

Ниже — как создать строку и сделать перенос строки, как вывести строку, взять подстроку, найти текст, какие есть методы строк в Python и как работать со списком строк. Отдельным методам — split, join, replace, strip и f-строкам — посвящены свои статьи, здесь они даны кратко со ссылками. Примеры проверены на Python 3.12.

Как создать строку

Строку записывают в одинарных или двойных кавычках — разницы нет. Тройные кавычки позволяют писать текст в несколько строк. Любой объект превращается в строку функцией str():

a = 'Привет'
b = "Python"
c = """Первая строка
Вторая строка"""
d = str(42)

print(c)
print(repr(d))         # → '42'
print(type(b))         # → <class 'str'>
print(isinstance(b, str))  # → True
Первая строка
Вторая строка

Тип строки в Python — str, проверять его удобнее через isinstance(). Отдельного типа «символ» нет: один символ — это строка длины 1. Об остальных встроенных типах — в статье о переменных и типах данных.

Новая строка и экранирование

Специальные символы внутри строки записывают через обратную косую черту. Новая строка (перенос) — \n, табуляция — \t:

print("Строка 1\nСтрока 2")
print("Колонка\tзначение")
print("Он сказал: \"Да\"")
print('It\'s ok')
print(len("a\nb"))  # → 3
Строка 1
Строка 2
Колонка	значение
Он сказал: "Да"
It's ok
3

\n — это один символ, поэтому длина "a\nb" равна 3. Сама обратная черта записывается как \\. Для путей Windows и регулярных выражений удобнее сырые строки с префиксом r — в них \ не экранирует ничего:

print("C:\\Users\\anna")      # → C:\Users\anna
print(r"C:\Users\anna\new")   # → C:\Users\anna\new

Как вывести строку: print

Функция print() выводит строку и в конце добавляет перевод строки. Несколько аргументов разделяются пробелом; разделитель меняет параметр sep, окончание — end:

name = "Анна"
print("Привет,", name)          # → Привет, Анна
print("a", "b", "c", sep="-")   # → a-b-c
print("без перевода строки", end="")
print(" — продолжение")         # → без перевода строки — продолжение
print(f"Привет, {name}!")       # → Привет, Анна!

Чтобы вставить переменную в строку, используйте f-строку, как в последней строке примера. Форматирование чисел, выравнивание и другие возможности — в статье об f-строках.

Индексы и срезы: как получить подстроку

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

s = "Python"
print(s[0])      # → P
print(s[-1])     # → n
print(s[0:2])    # → Py
print(s[2:])     # → thon
print(s[:-1])    # → Pytho
print(s[::2])    # → Pto
print(s[::-1])   # → nohtyP  (строка задом наперёд)
print(s[1:100])  # → ython   (срез не выходит за границы)

Обращение к несуществующему индексу вызывает IndexError, а срез с границами за пределами строки просто обрезается — ошибки не будет.

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

ОперацияПримерРезультат
Сложение"Py" + "thon"'Python'
Повторение"-" * 10'----------'
Проверка вхождения"th" in "Python"True
Длинаlen("Привет")6
Сравнение"apple" < "banana"True
Индекс и срез"Python"[1:3]'yt'

Строки сравниваются посимвольно по кодам Unicode, поэтому все заглавные латинские буквы «меньше» строчных: "Z" < "a" вернёт True. Для сравнения без учёта регистра приводите обе строки к одному регистру: a.lower() == b.lower().

Как найти подстроку в строке

Проще всего проверить вхождение оператором in. Если нужна позиция — find() или index():

text = "мама мыла раму"
print("мыла" in text)          # → True
print(text.find("мыла"))       # → 5
print(text.find("папа"))       # → -1
print(text.rfind("м"))         # → 12  (поиск с конца)
print(text.index("раму"))      # → 10
print(text.count("ма"))        # → 2
print(text.startswith("мама")) # → True
print(text.endswith((".txt", "раму")))  # → True

find() возвращает -1, если подстроки нет, а index() в этом случае выбрасывает ValueError: substring not found. В startswith() и endswith() можно передать кортеж вариантов. Для поиска по шаблону (цифры, e-mail, слова) используйте модуль re.

Методы строк Python: таблица

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

МетодЧто делаетПример → результат
upper() / lower()верхний / нижний регистр"мир".upper() → 'МИР'
capitalize()первая буква заглавная, остальные строчные"привет, мир" → 'Привет, мир'
title()каждое слово с заглавной"привет, мир" → 'Привет, Мир'
swapcase()меняет регистр каждой буквы"ПрИвЕт" → 'пРиВеТ'
casefold()«агрессивный» нижний регистр для сравнения"Straße" → 'strasse'
strip(), lstrip(), rstrip()убирает пробелы по краям" hi ".strip() → 'hi'
replace(old, new)заменяет подстроку"a-b".replace("-", "+") → 'a+b'
split(sep)делит строку в список"a b".split() → ['a', 'b']
sep.join(list)соединяет список в строку"-".join(["a", "b"]) → 'a-b'
find(), index(), count()поиск и подсчёт подстроки"aaa".count("a") → 3
startswith(), endswith()проверка начала и конца"file.py".endswith(".py") → True
removeprefix(), removesuffix()убирает префикс / суффикс (Python 3.9+)"report.pdf".removesuffix(".pdf") → 'report'
zfill(n)дополняет нулями слева"7".zfill(3) → '007'
center(), ljust(), rjust()выравнивание до заданной ширины"py".center(10, "*") → '****py****'
isdigit(), isalpha(), isalnum(), isspace()проверка состава строки"2026".isdigit() → True

Подробно о самых востребованных методах: split — разделение строки, join — соединение списка в строку, replace — замена подстроки и strip — удаление пробелов. Полный перечень — в документации по методам str.

Методы проверки работают буквально: "-12".isdigit() вернёт False, потому что минус — не цифра. Как надёжно превратить такую строку в число, рассказано в статье о преобразовании числа в строку и обратно.

Строки неизменяемы: как удалить символ или подстроку

Изменить символ строки «на месте» нельзя:

s = "Python"
s[0] = "J"  # → TypeError: 'str' object does not support item assignment

Вместо этого собирают новую строку и присваивают её той же переменной: s = "J" + s[1:] даст 'Jython'. По тому же принципу удаляют части строки:

s = "Hello, world!"
print(s.replace(",", ""))          # → Hello world!   (удалить все запятые)
i = 5
print(s[:i] + s[i + 1:])           # → Hello world!   (удалить символ по индексу)
print(s.removeprefix("Hello, "))   # → world!         (удалить начало)

Если нужно удалить строку из списка строк, это уже операция над списком — remove() по значению или del по индексу. Пустые строки удобно отфильтровать генератором:

words = ["яблоко", "груша", "слива"]
words.remove("груша")
print(words)  # → ['яблоко', 'слива']

lines = ["один", "", "два", "  ", "три"]
print([line for line in lines if line.strip()])  # → ['один', 'два', 'три']

Массив строк: список строк

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

fruits = ["яблоко", "груша", "слива"]
print(fruits[1])                  # → груша
print(len(fruits))                # → 3
print(sorted(fruits))             # → ['груша', 'слива', 'яблоко']
print([f.upper() for f in fruits])  # → ['ЯБЛОКО', 'ГРУША', 'СЛИВА']
print(", ".join(fruits))          # → яблоко, груша, слива
print(max(fruits, key=len))       # → яблоко
print(list("abc"))                # → ['a', 'b', 'c']

list("abc") разбивает строку на символы, а split() — на слова. Подробнее о списках — в статье о списках в Python.

Количество строк, символов и слов

len() возвращает количество символов. Количество строк в тексте считают через splitlines(), количество слов — через split():

text = "первая\nвторая\nтретья"
print(len(text.splitlines()))    # → 3
print(len("Привет, мир"))        # → 11
print(len("Привет, мир".split()))  # → 2

Для файла строки считают при чтении: sum(1 for _ in open("data.txt", encoding="utf-8")) — файл не загружается в память целиком.

Перебор строки в цикле

Строка — итерируемый объект, цикл for проходит по её символам. Если нужен ещё и индекс, используйте enumerate():

for i, ch in enumerate("кот"):
    print(i, ch)
0 к
1 о
2 т

Частые ошибки

TypeError: can only concatenate str (not “int”) to str

Строку нельзя сложить с числом — Python не преобразует типы сам:

age = 30
print("Мне " + age + " лет")       # → TypeError: can only concatenate str (not "int") to str
print("Мне " + str(age) + " лет")  # → Мне 30 лет
print(f"Мне {age} лет")            # → Мне 30 лет

Обратная ситуация: "5" + "5" даёт '55', а не 10 — значения из input() всегда строки.

Метод вызван, а строка не изменилась

s = "python"
s.upper()
print(s)  # → python
s = s.upper()
print(s)  # → PYTHON

Методы строк возвращают новую строку и не меняют исходную. Присвойте результат переменной.

IndexError: string index out of range

Индекс больше или равен длине строки. Последний символ — s[-1] или s[len(s) - 1], а не s[len(s)]. Перед обращением к первому символу проверяйте, что строка не пустая: if s:.

Проблемы с обратной косой чертой

Путь "C:\Users\anna" вызывает SyntaxError: \U Python читает как начало escape-последовательности. Пишите r"C:\Users\anna", удваивайте черту или используйте прямые слеши.

Частые вопросы

Как проверить, что строка пустая?

Пустая строка в условии считается ложью, поэтому достаточно if not s:. Строка из одних пробелов пустой не считается; чтобы отсеять и её, проверяйте s.strip():

s = "   "
print(not s)          # → False
print(not s.strip())  # → True

Как сделать заглавной только первую букву?

capitalize() переводит остальные буквы в нижний регистр. Если их нужно сохранить, соберите строку из первого символа и остатка:

s = "привет, Мир"
print(s.capitalize())         # → Привет, мир
print(s[:1].upper() + s[1:])  # → Привет, Мир

Срез s[:1] работает и для пустой строки, где s[0] вызвал бы IndexError.

Как получить код символа и символ по коду?

ord() возвращает номер символа в Unicode, chr() делает обратное преобразование:

print(ord("A"), ord("Я"))  # → 65 1071
print(chr(97), chr(8364))  # → a €

Как перевести строку в байты и обратно?

encode() превращает str в bytes в заданной кодировке, decode() возвращает строку. В UTF-8 кириллическая буква занимает 2 байта, поэтому длины различаются:

data = "Привет".encode("utf-8")
print(len("Привет"), len(data))  # → 6 12
print(data.decode("utf-8"))      # → Привет

Как оставить в строке только цифры?

Отфильтруйте символы методом isdigit() и соберите результат через join(). Для сложных правил подойдёт re.sub() с шаблоном.

text = "Заказ №42 от 05.10"
print("".join(ch for ch in text if ch.isdigit()))  # → 420510

Итог

Строка в Python — неизменяемый str: подстроку берут срезом, позицию ищут через find() или in, а методы вроде upper(), replace() и split() возвращают новую строку, которую нужно сохранить. Для переменных в тексте используйте f-строки, для списка строк — генераторы и join(). Остальные конструкции языка собраны в шпаргалке по синтаксису Python.

  • #Python
  • #str
  • #Строки
  • #Синтаксис
↑ ↓ выборEnter открытьEsc закрыть