← Все вопросы

Как убрать лишние пробелы в строке Python (strip)?

Задан 25 месяцев назад464 просмотров2 ответа
8

После ввода или чтения из файла в строке остаются пробелы и перевод строки по краям, и сравнения ломаются. Как обрезать пробелы в начале и конце? И как убрать только слева или только справа, а также все внутри?

2 ответа

13
✓ Принятый ответ — помог автору

Для пробелов по краям — метод strip(). Он убирает пробелы, табы и переводы строк слева и справа, возвращая новую строку:

s = '   привет   \n'
print(s.strip())    # 'привет'
print(repr(s.strip()))   # 'привет' — без пробелов и \n

Есть варианты только с одной стороны:

'  abc  '.lstrip()   # 'abc  '  — только слева
'  abc  '.rstrip()   # '  abc'  — только справа

Это частая причина «непонятных» багов: после input() или чтения строки файла на конце висит \n или пробел, и 'да' == 'да ' оказывается False. strip() это лечит:

answer = input().strip()
if answer == 'да':
    ...

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

'***важно***'.strip('*')   # 'важно'
'https://site/'.rstrip('/') # 'https://site'

Важно: аргумент это набор символов, а не подстрока. 'xxabcxx'.strip('xy') уберёт любые x и y по краям, в любом порядке.

А вот пробелы внутри строки strip не трогает. Чтобы убрать их, используйте replace(' ', '') (все пробелы) или нормализуйте через ' '.join(s.split()) — это схлопывает любые повторяющиеся пробелы в один:

' '.join('много    пробелов'.split())   # 'много пробелов'

И помните — строки неизменяемы, результат strip нужно присвоить.

5

Маленькое уточнение про аргумент strip: новички часто думают, что 'hello world'.strip('world') уберёт слово 'world'. На самом деле он уберёт любые символы из набора {w,o,r,l,d} по краям — получится 'hello ' (а 'h','e' остались, 'o' с конца снят). Чтобы убрать именно подстроку с конца, в Python 3.9+ есть removesuffix:

'file.txt'.removesuffix('.txt')   # 'file'
'name_temp'.removeprefix('name_') # 'temp'

Это как раз для случая «отрезать конкретное окончание/начало», а не набор символов.

Ваш ответ

, чтобы ответить на вопрос.