Вызов строкового метода 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) # преобразовать в строку: с пустым разделителем