Выбрать главу

Вызов строкового метода splitlines, используемый в этом сценарии, возвращает список подстрок, полученный в результате разбиения исходной строки по символам перевода строки (например, [“line”, “line”,...]). Альтернативный метод split позволяет получить похожий результат, но в последнем элементе массива он возвращает пустую строку, если исходная строка заканчивается символом \n:

>>> line = 'aaa\nbbb\nccc\n'

>>> line.split('\n')

[‘aaa’, ‘bbb’, ‘ccc’, ‘’]

>>> line.splitlines()

[‘aaa’, ‘bbb’, ‘ccc’]

Как будет показано далее в главе 4, символом конца строки в сценариях на языке Python всегда является \n (обозначающий байт с числовым значением 10), вне зависимости от платформы. (Если вы еще не знаете, почему это имеет значение, - символы DOS \r отбрасываются при чтении.)

Основы использования строковых методов

Пример 2.1 - это простая программа на языке Python, но в ней представлены три важные темы, заслуживающие краткого упоминания: она использует строковые методы, осуществляет чтение из файла и предусматривает возможность импортирования или выполнения как самостоятельного сценария. Строковые методы в языке Python как таковые не являются системными инструментами, но их можно встретить в большинстве программ на языке Python. В действительности они будут постоянно встречаться на протяжении этой и последующих глав, поэтому коротко рассмотрим наиболее полезные инструменты, имеющиеся в наборе. В число строковых методов входят вызовы для поиска и замены:

>>> mystr = 'xxxSPAMxxx'

>>> mystr.find('SPAM')    # вернет индекс первого вхождения

3

>>> mystr = 'xxaaxxaa'

>>> mystr.replace('aa', 'SPAM') # замена всех вхождений

‘xxSPAMxxSPAM’

Вызов метода find возвращает смещение первого вхождения подстроки, а метод replace осуществляет глобальный поиск и замену. Как и все строковые операции, метод replace возвращает новую строку, оставляя исходную строку неизменной (напомню, что строки являются неизменяемыми объектами). Для всех этих методов подстроки являются просто строками; в главе 19 будет представлен модуль re, который позволяет использовать шаблоны регулярных выражений при поиске и замене.

В самых последних версиях Python имеется возможность использовать оператор in определения принадлежности, как альтернативу методу find, когда необходимо всего лишь получить ответ «да» или «нет» (он проверяет присутствие подстроки в строке). Существует также несколько методов, удаляющих пробельные символы из концов строки, что особенно полезно при работе с текстовыми строками, извлекаемыми из файла:

>>> mystr = 'xxxSPAMxxx'

>>> 'SPAM' in mystr

# проверка присутствия подстроки в строке

True

>>> 'Ni' in mystr

# если подстрока отсутствует

False

>>> mystr.find('Ni')

-1

>>> mystr = '\t Ni\n'

>>> mystr.strip()    # удалит пробельные символы

‘Ni’

>>> mystr.rstrip()    # то же самое, но только с правого конца

‘\t Ni’

Среди строковых методов имеются также функции, которые могут быть полезны, например, как инструменты преобразования регистра символов, а кроме того, в стандартной библиотеке имеется модуль string, определяющий некоторые полезные константы:

>>> mystr = 'SHRUBBERY'

>>> mystr.lower()    #    преобразует регистр символов

‘shrubbery’

>>> mystr.isalpha()    #    проверяет содержимое

True

>>> mystr.isdigit()

False

>>> import string    # константы, например, для использования в ‘in’

>>> string.ascii_lowercase

‘abcdefghijklmnopqrstuvwxyz’

>>> string.whitespace    #    пробельные символы

‘ \t\n\r\x0b\x0c’

Существуют также методы, позволяющие разбивать строки по подстрокам-разделителям и объединять их вместе, вставляя между ними подстроку. Эти средства будут изучены далее в этой книге, но в качестве знакомства покажем, как они работают:

>>> mystr = 'aaa,bbb,ccc'

>>> mystr.split(',')    # разбить в список подстрок

[‘aaa’, ‘bbb’, ‘ccc’] >>> mystr = 'a b\nc\nd'

>>> mystr.split()    # разделитель по умолчанию: пробельные символы

[‘a’, ‘b’, ‘c’, ‘d’]

>>> delim = 'NI'

>>> delim.join(['aaa', 'bbb', 'ccc'])    # объединить подстроки из списка

‘aaaNIbbbNIccc’

>>> ' '.join(['A', 'dead', 'parrot']) # добавить пробел между подстроками ‘A dead parrot’

>>> chars = list('Lorreta') # преобразовать в список символов >>> chars

[‘L’, ‘o’, ‘r’, ‘r’, ‘e’, ‘t’, ‘a’]

>>> chars.append('!')

>>> ''.join(chars)    # преобразовать в строку: с пустым разделителем