Первую остановку в нашем обзоре средств обработки и синтаксического анализа текста мы сделаем на наиболее простых из них: объекты строк в языке 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».
Обработка шаблонов с помощью операций замены и форматирования
Посредством краткого обзора рассмотрим строковые методы в контексте некоторых наиболее типичных случаев их использования. Как мы уже видели при создании HTML-страниц переадресации в главе 6, строковый метод replace зачастую вполне справляется с ролью инструмента обработки шаблонов — мы можем вычислять значения и вставлять их в фиксированные позиции строк простыми вызовами методов:
> >> template = ‘—$target1—$target2—‘
> >> val1 = ‘Spam’
> >> val2 = ‘shrubbery’
> >> template = template.replace(‘$target1’, val1)
> >> template = template.replace(‘$target2’, val2)
> >> template
‘—Spam—shrubbery—‘
Кроме того, когда мы создавали 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)
‘—Spam—shrubbery—‘
>>> template.substitute(key1=’Brian’, key2=’Loretta’)
‘—Brian—Loretta—‘
За дополнительной информацией об этом расширении обращайтесь к руководству по библиотеке. Несмотря на то, что сам строковый тип не поддерживает обработку текста с применением шаблонов, с которой мы познакомимся далее в этой главе, тем не менее, его инструменты обладают возможностями, достаточно широкими для большинства задач.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011