strip() в Python: как обрезать пробелы и символы
Метод strip() в Python 3 возвращает копию строки без пробелов и переводов строки в начале и конце. В статье разобраны синтаксис, работа аргумента chars, родственные методы lstrip() и rstrip(), а также ошибка, из-за которой 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Разберем результаты по порядку:
- В первом вызове пробел, x, o и e входят в набор. Слева метод снимает все до буквы l, справа доходит до v, потому что буква e тоже в наборе. Получается lov.
- Во втором вызове пробела в наборе нет, а строка начинается и заканчивается пробелами. Метод сразу останавливается, и строка возвращается без изменений.
- В третьем вызове слева удалены a и n, а справа строка заканчивается на e, которой в наборе нет.
При передаче аргумента пробелы перестают удаляться автоматически. Если нужно убрать и пробелы, и точки, включите пробел в набор явно: 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 в генераторе списка.