Работа со строками (и в частности с беспорядочными) — обычное дело для разработчиков 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».
