Вход/Регистрация
Язык программирования Python
вернуться

Сузи Роман Арвиевич

Шрифт:

if found == -1:

break

print text[found:found + 60].split(«(")[0]

start = found + 1

Важным для преобразования текстовой информации является метод replace, который рассматривается ниже:

Листинг

>>> a = «Это текст , в котором встречаются запятые , поставленные не так.»

>>> b = a.replace(" ,", ",")

>>> print b

Это текст, в котором встречаются запятые, поставленные не так.

Рекомендации по эффективности

При работе с очень длинными строками или большим количеством строк, применяемые операции могут по–разному влиять на быстродействие программы.

Например, не рекомендуется многократно использовать операцию конкатенации для склеивания большого количества строк в одну. Лучше накапливать строки в списке, а затем с помощью join собирать в одну строку:

Листинг

>>> a = ""

>>> for i in xrange(1000):

… a += str(i) # неэффективно!

…

>>> a = "".join([str(i) for i in xrange(1000)]) # более эффективно

Конечно, если строка затем обрабатывается, можно применять итераторы, которые позволят свести использование памяти к минимуму.

Модуль StringIO

В некоторых случаях желательно работать со строкой как с файлом. Модуль StringIO как раз дает такую возможность.

Открытие «файла» производится вызовом StringIO. При вызове без аргумента — создается новый «файл», при задании строки в качестве аргумента — «файл» открывается для чтения:

Листинг

import StringIO

my_string = «1234567890»

f1 = StringIO.StringIO

f2 = StringIO.StringIO(my_string)

Далее с файлами f1 и f2 можно работать как с обычными файловыми объектами.

Для получения содержимого такого файла в виде строки применяется метод getvalue:

Листинг

f1.getvalue

Противоположный вариант (представление файла на диске в виде строки) можно реализовать на платформах Unix и Windows с использованием модуля mmap. Здесь этот модуль рассматриваться не будет.

Модуль difflib

Для приблизительного сравнения двух строк в стандартной библиотеке предусмотрен модуль difflib.

Функция difflib.get_close_matches позволяет выделить n близких строк к заданной строке:

Листинг

get_close_matches(word, possibilities, n=3, cutoff=0.6)

где

Листинг

word

Строка, к которой ищутся близкие строки.

Листинг

possibilities

Список возможных вариантов.

Листинг

n

Требуемое количество ближайших строк.

Листинг

cutoff

Коэффициент (из диапазона [0, 1]) необходимого уровня совпадения строк. Строки, которые при сравнении с word дают меньшее значение, игнорируются.

Следующий пример показывает функцию difflib.get_close_matches в действии:

Листинг

>>> import unicodedata

>>> names = [unicodedata.name(unicode(chr(i))) for i in range(40, 127)]

>>> print difflib.get_close_matches(«LEFT BRACKET», names)

['LEFT CURLY BRACKET', 'LEFT SQUARE BRACKET']

В списке names — названия Unicode–символов с ASCII–кодами от 40 до 127.

Регулярные выражения

Рассмотренных стандартных возможностей для работы с текстом достаточно далеко не всегда. Например, в методах find и replace задается всего одна строка. В реальных задачах такая однозначность встречается довольно редко, чаще требуется найти или заменить строки, отвечающие некоторому шаблону.

Регулярные выражения (regular expressions) описывают множество строк, используя специальный язык, который сейчас и будет рассмотрен. (Строка, в которой задано регулярное выражение, будет называться шаблоном.)

Для работы с регулярными выражениями в Python используется модуль re. В следующем примере регулярное выражение помогает выделить из текста все числа:

Листинг

>>> import re

>>> pattern = r»[0–9]+»

>>> number_re = re.compile(pattern)

>>> number_re.findall(«122 234 65435»)

['122', '234', '65435']

В этом примере шаблон pattern описывает множество строк, которые состоят из одного или более символов из набора «0», «1» , …, «9» . Функция re.compile компилирует шаблон в специальный Regex–объект, который имеет несколько методов, в том числе метод findall для получения списка всех непересекающихся вхождений строк, удовлетворяющих шаблону, в заданную строку.

  • Читать дальше
  • 1
  • ...
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: