Шаг 33.
Python: сборник рецептов.
Строки и текст. Удаление нежелательных символов из строк

    На этом шаге мы рассмотрим способы решения этой задачи.

Задача

    Вы хотите удалить ненужные символы, такие как пробелы в начале, в конце или в середине текстовой строки.

Решение

    Метод strip() можно использовать для удаления символов в начале или конце строки. lstrip() и rstrip() выполняют удаление слева и справа соответственно. По умолчанию они удаляют пробельные символы, однако им можно передать и другие символы. Например:

>>> # Удаление пробельных символов
>>> s = ' hello world \n'
>>> s.strip()
'hello world'
>>> s.lstrip()
'hello world \n'
>>> s.rstrip()
' hello world'
>>> # Удаление других символов
>>> t = '-----hello====='
>>> t.lstrip('-')
'hello====='
>>> t.strip('-=')
'hello'
>>> 


Обсуждение

    Различные методы strip() часто используются при чтении и чистке данных для последующей обработки. Например, вы можете использовать их, чтобы избавиться от пробелов, удалить кавычки и т. д.

    Обратите внимание, что это удаление символов нельзя применить к тексту в середине строки. Например:

>>> s = ' hello   world \n'
>>> s = s.strip()
>>> s
'hello   world'
>>> 

    Если вам нужно что-то сделать с внутренним пробелом, вам нужно применить другой прием, такой как использование метода replace() или подстановка с использованием регулярного выражения. Например:

>>> s.replace(' ', '')
'helloworld'
>>> import re
>>> re.sub('\s+', '', s)
'helloworld'
>>> 

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

применить выражение-генератор:
with open(filename) as f:
    lines = (line.strip() for line in f) 
    for line in lines:
        .   .   .   .

    Здесь выражение lines = (line.strip() for line in f) работает как преобразователь данных. Это эффективно, потому что оно не читает данные из какого-либо временного списка. Оно просто создает итератор, где ко всем производимым строкам применена операция срезания символов.

    Для более продвинутого срезания вам стоит обратиться к методу translate(). Детали вы найдете в следующем рецепте, где описана чистка строк.

    На следующем шаге мы рассмотрим чистку строк.




Предыдущий шаг Содержание Следующий шаг