В языке 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), все эти символы всё равно будут удалены.
После этого компьютер начинает проверять по одному символу слева и справа строки по такому алгоритму:
- Этот символ строки входит в множество в скобках?
- Если скобки пустые, то подходит ли этот символ под те, которые нужно удалять по умолчанию?
- Если ответ на первый или второй вопрос — да, программа запоминает, что для новой строки этот символ нужно удалить.
- Потом алгоритм переходит к следующему символу, и всё начинается сначала.
- Метод работает как бы параллельно с двух сторон. Если на каком-то шаге при обработке строки слева или справа мы находим символ, который не нужно удалять, алгоритм останавливается — но только на обработке той стороны, где больше не нужно ничего удалять.
- Когда с обоих концов строк больше не нужно ничего удалять, метод останавливается и возвращает новую строку.
Пример:
# строка окружена пробелом, кавычками и слешем
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
Вам слово
Приходите к нам в соцсети поделиться своим мнением о статье и почитать, что пишут другие. А ещё там выходит дополнительный контент, которого нет на сайте — шпаргалки, опросы и разная дурка. В общем, вот тележка, вот ВК — велком!
