Работа со строками (и в частности с беспорядочными) – обычное дело для разработчиков Python и специалистов по анализу данных. Одним из наиболее распространенных признаков беспорядочной строки является наличие в ней лишних или повторяющихся пробелов. К счастью, независимо от того, насколько беспорядочной является строка и насколько сложным является сценарий, Python предоставляет подходящие способы удалить пробелы.
В этой статье будет представлено 5 различных методов удаления пробелов в строке, основанных на различных сценариях и требованиях. После прочтения вы сможете выбрать наиболее подходящий способ для своего кода.
Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU
Как удалить начальные и конечные пробелы в строке
Самый простой случай – когда не нужны пробелы в начале и конце строки. Для их удаления нужно всего лишь применить функцию strip()
. Например:
quote = " Yang is a full stack hacker. " clean_quote = quote.strip() print(clean_quote) # Вывод: # Yang is a full stack hacker.
Как видите, использовать функцию strip()
очень просто. Стоит отметить одну вещь: строки в Python неизменяемы. Исходная строка quote
не была изменена. Результат работы функции strip() нужно присвоить какой-нибудь переменной.
Кроме того, существует два варианта функции strip()
:
lstrip()
: удаляет только пробелы в начале строкиrstrip()
: удаляет только пробелы в конце строки.
Как удалить все пробелы в строке
Поскольку удаление пробелов в строке равносильно замене каждого пробела на пустой символ, для выполнения этой работы можно использовать функцию replace()
. Это обычный метод для случаев, когда нам нужно удалить все пробелы в строке.
name = " Ya n g " clean_name = name.replace(' ', '') print(clean_name) # Вывод: # Yang
Еще один способ удаления всех пробелов
Python очень гибкий язык, и многие вещи можно сделать разными способами. В частности, удалить все пробелы из строки можно и с помощью функции translate()
.
name = " Ya n g " clean_name = name.translate({ord(' '): None}) print(clean_name) # Вывод: # Yang
Возможно, на первый взгляд работа функции translate()
не выглядит интуитивно понятной, но не волнуйтесь. Просто нужно знать два правила для выбора ее аргумента:
- Это должен быть словарь или таблица отображения
- Если это словарь, то следует использовать коды ASCII, а не символы.
Второе правило легко выполнить. Мы можем просто использовать встроенную функцию ord()
для преобразования символа в соответствующий ему код ASCII.
Первое правило дает нам больше гибкости. Если нам нужно изменить много символов, а не только пробелы, то многократное написание функции ord()
может надоесть. В этом случае мы можем использовать функцию maketrans()
, чтобы сначала сгенерировать таблицу сопоставления из исходных символов:
name = " Ya n g " map_table = name.maketrans({' ': None}) clean_name = name.translate(map_table) print(clean_name) # Вывод: # Yang
Как удалить повторяющиеся пробелы в строке
Иногда нам нужно удалить не все пробелы в строке, а только повторяющиеся. В этом случае мы можем использовать комбинацию двух следующих функций:
split()
: делит строку на подстроки по указанному разделителю (по умолчанию – пробел) и возвращает список подстрокjoin()
: объединяет все элементы списка в строку с помощью заданного разделителя.
quote = " Yang is a full stack hacker." new_quote = ' '.join(quote.split()) print(new_quote) # Вывод: # Yang is a full stack hacker.
Здесь мы помещаем все слова в список и таким образом избавляемся от пробелов, а затем объединяем их, используя в качестве разделителя одиночный пробел.
Примечание редакции: о функции join()
читайте в статье “Метод join() и объединение строк в Python”.
Удаление пробелов при помощи регулярных выражений
Рассмотренные способы достаточно действенны для многих простых сценариев. Однако реальные данные могут быть очень сложными и беспорядочными. Предыдущие способы не могут справиться со всеми случаями. (Если вы специалист по анализу данных и очистка беспорядочных данных является частью вашей работы, вы со мной согласитесь).
Поэтому иногда нам приходится использовать самое совершенное оружие для работы со строками – регулярные выражения (RegEx). Если вы знакомы с RegEx, то сможете с их помощью удалить пробелы из строки во всех рассмотренных ситуациях. Но регулярные выражения помогут и в более сложных случаях.
Допустим, нам нужно удалить пробелы, идущие по два подряд, но сохранить все одиночные пробелы. В такой ситуации уже рассмотренные методы нам не помогут. А вот RegEx это вполне по силам:
import re quote = " Yang is a full stack ha ck er." new_quote = re.sub(r"\s{2}", "", quote) print(new_quote) # Вывод: # Yang is a full stack hacker.
Заключение
Удаление пробелов из строки – обычная задача для разработчиков. Для некоторых простых сценариев достаточно встроенных функций Python. Для более сложных случаев лучшим инструментом является RegEx.
Перевод статьи Yang Zhou «5 Ways To Remove Spaces of a Python String».