Python: уроки, справочник и задачи

strip() в Python: как обрезать пробелы и символы

Раздел: Строки в Python · Обновлено 31.10.2026

Метод strip() в Python 3 возвращает копию строки без пробелов и переводов строки в начале и конце. В статье разобраны синтаксис, работа аргумента chars, родственные методы lstrip() и rstrip(), а также ошибка, из-за которой strip иногда отрезает лишние буквы.

strip() в Python: как обрезать пробелы и символы
Фото: 多多123 / CC BY 4.0, Wikimedia Commons
Содержание статьи
  1. Синтаксис и базовое использование
  2. Аргумент chars: набор, а не подстрока
    1. Частая ошибка с расширением файла
  3. lstrip и rstrip для одной стороны
  4. Практические примеры
    1. Очистка пользовательского ввода
    2. Чтение файла построчно
    3. Очистка элементов после split
  5. Как убрать пробелы внутри строки
  6. Частые вопросы
    1. Почему strip не изменил строку?
    2. Удаляет ли strip символ перевода строки?
    3. Можно ли удалить слово в начале строки через lstrip?
    4. Работает ли strip со списками?

Синтаксис и базовое использование

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

str.strip(chars=None)

Без аргумента strip удаляет с обоих краев все пробельные символы: обычный пробел, табуляцию \t, перевод строки \n, возврат каретки \r и другие символы, для которых isspace() возвращает True, включая неразрывный пробел. Пробелы внутри строки остаются на месте.

message = "    Учи Python  \n"
print(repr(message.strip()))  # 'Учи Python'

text = "  два   слова  "
print(repr(text.strip()))     # 'два   слова'

Строки в Python неизменяемы, поэтому strip не трогает исходный объект, а возвращает новый. Запись message.strip() без присваивания ничего не изменит: нужно писать message = message.strip(). Чтобы видеть невидимые символы при отладке, выводите строку через repr(), как в примерах выше.

Аргумент chars: набор, а не подстрока

Если передать аргумент, strip удаляет с краев любые символы из этого набора, в любом порядке и любом количестве. Порядок букв в аргументе значения не имеет: strip("ab") и strip("ba") работают одинаково. Удаление идет с каждой стороны до первого символа, которого в наборе нет.

s = "  xoxo love xoxo   "

print(repr(s.strip(" xoe")))  # 'lov'
print(repr(s.strip("stx")))   # '  xoxo love xoxo   '
print("android is awesome".strip("an"))  # droid is awesome

Разберем результаты по порядку:

При передаче аргумента пробелы перестают удаляться автоматически. Если нужно убрать и пробелы, и точки, включите пробел в набор явно: strip(" .").

Частая ошибка с расширением файла

Попытка отрезать расширение через rstrip приводит к потере букв имени, если они совпадают с символами набора:

print("report.txt".rstrip(".txt"))       # repor
print("report.txt".removesuffix(".txt"))  # report

Метод видит набор символов {., t, x} и удаляет их справа, включая последнюю букву t в слове report. Для удаления точной подстроки с края используйте removesuffix() и removeprefix(), они появились в Python 3.9.

lstrip и rstrip для одной стороны

У strip есть два варианта, которые работают только с одним краем. Аргументы у них те же.

МетодКакой край обрабатываетПримерРезультат
strip()Оба" a ".strip()'a'
lstrip()Левый"00042".lstrip("0")'42'
rstrip()Правый"line\n".rstrip("\n")'line'
removeprefix()Левый, точная подстрока"v1.2".removeprefix("v")'1.2'
removesuffix()Правый, точная подстрока"img.png".removesuffix(".png")'img'

Будьте внимательны с lstrip("0"): строка из одних нулей превратится в пустую. Если результат дальше передается в int(), проще сразу вызвать int("00042"), функция сама отбросит ведущие нули.

Практические примеры

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

Очистка пользовательского ввода

Функция input() возвращает строку как есть. Случайный пробел в конце логина ломает сравнение, поэтому ввод обычно сразу очищают.

answer = input("Продолжить? (да/нет): ").strip().lower()
if answer == "да":
    print("Продолжаем")

Чтение файла построчно

Каждая строка, прочитанная из текстового файла, заканчивается символом \n. Метод rstrip убирает его вместе с хвостовыми пробелами, а проверка отсеивает пустые строки.

with open("data.txt", encoding="utf-8") as f:
    lines = [line.rstrip() for line in f if line.strip()]

Очистка элементов после split

После разбиения строки по запятой у элементов остаются пробелы. Их удобно убрать генератором списка. Подробнее о разбиении строк в статье про split.

raw = " яблоко , груша,  слива "
tags = [t.strip() for t in raw.split(",")]
print(tags)  # ['яблоко', 'груша', 'слива']

Как убрать пробелы внутри строки

strip работает только с краями. Если нужно схлопнуть несколько пробелов подряд в один, используют связку split и join. Для удаления всех пробелов подойдет replace().

s = "  много    лишних   пробелов  "
print(" ".join(s.split()))   # много лишних пробелов
print(s.replace(" ", ""))    # многолишнихпробелов

Вызов split() без аргументов делит строку по любым пробельным символам и отбрасывает пустые элементы, поэтому края очищаются автоматически. Остальные методы строк собраны в справочнике методов строк, а официальное описание есть в документации Python.

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

Ответы на вопросы, которые возникают при работе с strip.

Почему strip не изменил строку?

Метод возвращает новую строку и не меняет исходную. Присвойте результат переменной: s = s.strip().

Удаляет ли strip символ перевода строки?

Да, без аргументов strip удаляет \n, \r, \t и другие пробельные символы с обоих краев. Если нужно убрать только перевод строки, вызовите rstrip("\n").

Можно ли удалить слово в начале строки через lstrip?

Нет, lstrip принимает набор символов и может отрезать больше, чем нужно: "www.wiki.org".lstrip("w.") вернет 'iki.org'. Для точного префикса используйте removeprefix("www.").

Работает ли strip со списками?

Нет, это метод строк. У списка вызов strip() вызовет AttributeError. Чтобы очистить каждый элемент, примените strip в генераторе списка.