Как удалить пробелы из строки в Python

Работа со строками (и в частности с беспорядочными) – обычное дело для разработчиков 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() не выглядит интуитивно понятной, но не волнуйтесь. Просто нужно знать два правила для выбора ее аргумента:

  1. Это должен быть словарь или таблица отображения
  2. Если это словарь, то следует использовать коды 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».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *