Метод strip() в Python

Когда нужен и как пользоваться

Метод strip() в Python

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

Сегодня разбираем на примерах один из таких инструментов, который умеет обрезать строки по краям от ненужных символов и делает работу удобнее, — метод strip().

Определение и использование метода strip()

Если в программе мы работаем с готовыми строками, которые берём откуда-то из третьего места, часто в начале и в конце они могут содержать лишние ненужные символы: пробелы, кавычки, служебные символы в некоторых форматах файлов.

В середине такие символы обычно имеют смысл и нужны, чтобы не поломать структуру строки. Например, пробелы отделяют слова друг от друга.

Метод strip() очищает строку по краям, чтобы дальше с ней было удобнее работать. Что именно нужно удалить, определяет программист.

Всю оставшуюся часть статьи мы будем учиться делать это на примерах в коде — сразу чтобы было наглядно и полезно.

Полезный блок со скидкой

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

Бесплатные курсы в Практикуме тоже есть — по всем специальностям и направлениям, начать можно в любой момент, карту привязывать не нужно, если что.

Синтаксис метода strip

Метод бывает в трёх вариантах:

  • Для работы с началом и концом строки: .strip().
  • Очищает начало строки, или левый край: .lstrip().
  • Очищает конец строки — правый край: .strip().

Работает это так:

# создаём строку с пробелами в начале и в конце
string = "  Кто бы ты ни был, мой читатель...   "
# удаляем пробелы в начале и в конце
remove = string.strip()
# удаляем пробелы в начале строки
leading = string.lstrip()
# удаляем пробелы в конце строки
trailing = string.rstrip()
print(f"Результат работы метода strip: #{remove}#")
print(f"Результат работы метода lstrip: #{leading}#")
print(f"Результат работы метода rstrip: #{trailing}#")

Что мы здесь сделали: создали строку с пробелами в начале и в конце, применили все три варианта метода и вывели результаты на экран. Причём в каждом выводе мы добавили символ # по краям наших обработанных строк, чтобы было видно, где пробелы остались, а где удалились.

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

Результат работы метода strip: #Кто бы ты ни был, мой читатель…#
Результат работы метода lstrip: #Кто бы ты ни был, мой читатель… #
Результат работы метода rstrip: # Кто бы ты ни был, мой читатель…#

Параметры метода strip

Единственный параметр-аргумент, который в скобках принимает метод, называется chars. Это символы для удаления в начале и конце строки.

Работает это так: мы передаём в скобках строку и внутри неё без пробелов перечисляем символы. После этого Python разбивает эту строку на множество: неупорядоченную коллекцию элементов, которые можно быстро проверить и узнать, есть там такой же символ, как слева или справа в строке, или нет.

Например, если мы передадим внутри скобок (‘char’), то для метода это будет не строка, а множество (‘c’, ‘h’, ‘a’, ‘r’). Это значит, что если в начале строки стоит char, а мы передали в скобках (rhac), все эти символы всё равно будут удалены.

После этого компьютер начинает проверять по одному символу слева и справа строки по такому алгоритму:

  1. Этот символ строки входит в множество в скобках?
  2. Если скобки пустые, то подходит ли этот символ под те, которые нужно удалять по умолчанию?
  3. Если ответ на первый или второй вопрос — да, программа запоминает, что для новой строки этот символ нужно удалить.
  4. Потом алгоритм переходит к следующему символу, и всё начинается сначала.
  5. Метод работает как бы параллельно с двух сторон. Если на каком-то шаге при обработке строки слева или справа мы находим символ, который не нужно удалять, алгоритм останавливается — но только на обработке той стороны, где больше не нужно ничего удалять.
  6. Когда с обоих концов строк больше не нужно ничего удалять, метод останавливается и возвращает новую строку.

Пример:

# строка окружена пробелом, кавычками и слешем
raw = '/"нужные данные@#'

# удаляем пробел, слеш и двойную кавычку, где они встречаются на краях
clean = raw.strip('/"@#')

# выводим результат на экран
print(clean)

Метод проверил строку слева и справа отдельно на символы, входящие в множество, и удалил все подходящие. После этого мы получили новую строку в переменной clean:

данные

Примеры использования метода strip

Для закрепления разберём ещё несколько разных примеров работы strip().

Удаление пробелов с начала и конца строки

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

# строка окружена пробелом, кавычками и слешем
spaces = '  «Доедет то колесо в Москву или не доедет?»  '

# удаляем пробел, слеш и двойную кавычку, где они встречаются на краях
removes = spaces.strip()

# выводим результат на экран
print(removes)

Обратите внимание, что из середины строки пробелы не удаляются. Функция последовательно идёт слева и справа и останавливается, как только доходит до элемента, который не нужно удалять:

«Доедет то колесо в Москву или не доедет?»

Удаление пользовательских символов

Чтобы самим указать, что нужно удалить, мы перечисляем эти символы в одну строку в кавычках. Метод проверит строку с обоих концов и удалит все символы, подходящие под наше условие:

# строка окружена пробелом, кавычками и слешем
spaces = '123«Доедет»456'

# удаляем пробел, слеш и двойную кавычку, где они встречаются на краях
removes = spaces.strip('123456')

# выводим результат на экран
print(removes)

Все элементы в составе строки-аргумента удалились как с начала, так и с конца:

«Доедет»

Удаление символов новой строки

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

Попробуем на таком примере:

# строка окружена пробелом, кавычками и слешем
beginning = '«А в Казань-то, я думаю, не доедет?»\n'

# удаляем пробел, слеш и двойную кавычку, где они встречаются на краях
end = beginning.strip()

# выводим результат на экран
print(beginning)
print('«В Казань не доедет»')
print(end)
print('«В Казань не доедет»')

Для вывода мы дополнительно добавили ещё одну строку, чтобы посмотреть, где символ переноса новой строки остался, а где удалился:

«А в Казань-то, я думаю, не доедет?»

«В Казань не доедет»
«А в Казань-то, я думаю, не доедет?»
«В Казань не доедет»

Функции lstrip() и rstrip()

Когда нужно удалить символы только справа или слева, используют урезанный вариант метода: lstrip() или rstrip().

Проверяем на начале строки:

# строка с ведущими нулями
num = "00012050"

# удаляем нули слева
print(num.lstrip("0"))

Смотрим вывод:

12050

Теперь попробуем сделать то же в конце, где могут скопиться лишние слеши:

# путь с лишними слэшами справа
path = "/assets/images///"

# удаляем только завершающие слэши
print(path.rstrip("/"))

Запускаем код:

/assets/images

Какие символы удаляет метод strip по умолчанию?

По умолчанию удаляются все пробельные символы: пробел (” “), таб (\t), перевод строки (\n), возврат курсора (\r), табуляция (\v) и перевод страницы (\f)

Вот код со строкой с разными символами по краям. Мы ничего не указываем в параметрах, но метод всё равно удаляет их:

# строка с разными символами вокруг текста
whitespaces = "\t  function  \n"

# удаляем все символы по краям
clean = whitespaces.strip()

# печатаем repr для наглядности
print(repr(clean))

Для наглядности мы печатаем строку в кавычках через метод repr(), чтобы увидеть, сохранилось ли что-то по краям:

‘function’

Как strip отличается от replace?

Главное различие в том, что strip() обрезает края. Replace() — это точечная замена фрагмента строки в любом месте. Если мы попросим заменить пробелы на другой символ, они поменяются во всей строке, не только в начале и конце.

Ещё strip() умеет работать без аргументов, а replace() — нет.

Сравнение с другими методами обработки строк

Вот ещё несколько встроенных возможностей языка для работы со строками.

Есть два метода, которые удаляют точные совпадения подстрок в начале и конце — по одному методу на очистку строки слева и справа. Эти методы называются removeprefix() и removesuffix().

Как работают:

text = "///data///"

# strip удаляет любой / с обоих концов
print(text.strip("/"))

# removeprefix уберёт только точное совпадение
print(text.removeprefix("/"))

# removesuffix — то же самое для конца
print(text.removesuffix("/"))

Смотрим: strip() убрал все подходящие под условие элементы, а removeprefix() и removesuffix() — только по одному символу, потому что распознают параметр не как множество, а как точную часть строки.

data
//data///
///data//

Ещё есть метод split(). Он разрезает строку по указанному символу:

text = "один---два---три"
print(text.split("---"))

Запускаем:

[‘один’, ‘два’, ‘три’]

Последняя функция-метод на сегодня — join(). В отличие от split(), наоборот, склеивает строки через переданный аргумент. Например, здесь мы передаём запятую и пробел:

letters = ["used", "whitespace", "remove"]
print(", ".join(letters))

used, whitespace, remove

Вам слово

Приходите к нам в соцсети поделиться своим мнением о статье и почитать, что пишут другие. А ещё там выходит дополнительный контент, которого нет на сайте — шпаргалки, опросы и разная дурка. В общем, вот тележка, вот ВК — велком!

Обложка:

Алексей Сухов

Корректор:

Александр Зубов

Вёрстка:

Егор Степанов

Соцсети:

Юлия Зубарева

Вам может быть интересно
easy