Строковые методы Python

strokovye metody python Текст и язык

Первую остановку в нашем обзоре средств обработки и синтаксического анализа текста мы сделаем на наиболее простых из них: объекты строк в языке Python обладают массой инструментов для обработки текста и служат первой линией обороны в этой области. Как вы уже наверняка знаете, конкатенация, извлечение среза, форматирование и другие операции над строками являются рабочими лошадками в большинстве программ (я включил в эту категорию и новейший метод format, так как в действительности он является просто альтернативной версией оператора % форматирования):

>   >> spam eggs ham‘[5:10] # извлечение среза: подстрока

‘eggs

>   >> spam ‘ + eggs ham # конкатенация (и *, len(), [ix])

‘spam eggs ham’

>   >> spam %s %s% (‘eggs‘, ‘ham) # выражение форматирования: подстановка

‘spam eggs ham’

>   >> ‘spam {} {}’.format(‘eggs’, ‘ham’) # метод форматирования: альтернатива % ‘spam eggs ham’

>   >> spam = "%-5s", %+06d% (‘ham‘, 99) # более сложное форматирование spam = "ham ", +00099′

>   >> ‘spam = "{0:<5}", {1:+06}’.format(‘ham’, 99)

‘spam = "ham ", +00099′

Эти операции рассматриваются в источниках, посвященных основам языка, таких как «Изучаем Python». Однако в этой главе нас интересуют более мощные инструменты: помимо операторов строковых выражений объекты строк в языке Python поддерживают самые разнообразные утилиты обработки текста, реализованные как ме то ды. Мы познакомились с некоторыми из них в главе 2 и с тех пор постоянно использовали их. Например, экземпляр str встроенного строкового типа предоставляет следующие операции в виде методов объектов:

str.find(substr)

Выполняет поиск подстроки.

str.replace(old, new)

Выполняет подстановку подстроки.

str.split(delimiter)

Разбивает строку по указанному разделителю или пробельным символам.

str.join(iterable)

Объединяет подстроки, вставляя разделители между ними.

str.strip()

Удаляет ведущие и завершающие пробельные символы.

str.rstrip()

Удаляет только завершающие пробельные символы, если они имеются.

str.rjust(width)

Выравнивает строку по правому краю в поле фиксированной ширины.

str.upper()

Переводит все символы в верхний регистр.

str.isupper()

Проверяет — все ли символы в строке являются символами верхнего регистра.

str.isdigit()

Проверяет — все ли символы в строке являются цифрами.

str.endswith(substr-or-tuple)

Проверяет присутствие подстроки (или одного из вариантов в кортеже) в конце данной строки.

str.startswith(substr-or-tuple)

Проверяет присутствие подстроки (или одного из вариантов в кортеже) в начале данной строки.

Этот список является достаточно показательным, но неполным, и некоторые из представленных методов принимают дополнительные необязательные аргументы. Чтобы получить полный перечень строковых методов, выполните вызов dir(str) в интерактивной оболочке Python, а чтобы получить краткую справку по тому или иному методу, выполните вызов help(str.method). Кроме того, исчерпывающий список можно найти в руководстве по стандартной библиотеке Python и в справочниках, таких как «Python Pocket Reference».

Более того, в современных версиях Python все обычные строковые методы могут применяться к строкам обоих типов, bytes и str. Последний из них позволяет применять методы к тексту, содержащему произвольные символы Юникода, просто потому, что строки типа str являются текстом Юникода, даже если он состоит только из символов ASCII. Первоначально эти методы были реализованы в виде функций в модуле string, но на сегодняшний день они доступны только в виде методов. Модуль string все еще присутствует в стандартной библиотеке, потому что он содержит ряд предопределенных констант (например, string. ascii_uppercase), а также реализацию интерфейса подстановки Template, появившуюся в версии Python 2.4, — один из инструментов, рассматриваемых в следующем разделе.

Обработка шаблонов с помощью операций замены и форматирования

Посредством краткого обзора рассмотрим строковые методы в контексте некоторых наиболее типичных случаев их использования. Как мы уже видели при создании HTML-страниц переадресации в главе 6, строковый метод replace зачастую вполне справляется с ролью инструмента обработки шаблонов — мы можем вычислять значения и вставлять их в фиксированные позиции строк простыми вызовами методов:

>   >> template = ‘—$target1$target2—‘

>   >> val1 = ‘Spam’

>   >> val2 = ‘shrubbery’

>   >> template = template.replace(‘$target1’, val1)

>   >> template = template.replace(‘$target2’, val2)

>   >> template

‘—Spamshrubbery—‘

Кроме того, когда мы создавали HTML-страницы ответов в сценариях CGI в главах 15 и 16, мы видели, что оператор % форматирования строк также является мощным инструментом обработки шаблонов, особенно в соединении со словарями — достаточно просто заполнить словарь требуемыми значениями и выполнить множественную подстановку в строку HTML:

>>> template = """

%(key1)s

%(key2)s

>>> 

>   >> vals = {}

>   >> vals[‘key1’] = ‘Spam’

>   >> vals[‘key2’] = ‘shrubbery’

>   >> print(template % vals)

>   Spam

>   shrubbery

Начиная с версии Python 2.4, в модуле string появилась реализация интерфейса Template, который по сути является упрощенной и ограниченной версией только что показанной схемы форматирования на основе словаря, но который предоставляет некоторые дополнительные методы, более простые в использовании:

>   >> vals

{‘key2’: ‘shrubbery’, ‘key1’: ‘Spam’}

>   >> import string

>   >> template = string.Template(‘$key1$key2—‘)

>>> template.substitute(vals)

‘—Spamshrubbery—‘

>>> template.substitute(key1=’Brian’, key2=’Loretta’)

‘—BrianLoretta—‘

За дополнительной информацией об этом расширении обращайтесь к руководству по библиотеке. Несмотря на то, что сам строковый тип не поддерживает обработку текста с применением шаблонов, с которой мы познакомимся далее в этой главе, тем не менее, его инструменты обладают возможностями, достаточно широкими для большинства задач.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий