Чтение онлайн

на главную - закладки

Жанры

Язык программирования 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 для получения списка всех непересекающихся вхождений строк, удовлетворяющих шаблону, в заданную строку.

То же самое можно было сделать и так:

Листинг

>>> import re

>>> re.findall(r»[0–9]+», «122 234 65435»)

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

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

Примечание:

Следует заметить, что для задания шаблона использована необработанная строка. В данном примере она не требовалась, но в общем случае лучше записывать строковые литералы именно так, чтобы исключить влияние специальных последовательностей, записываемых через обратную косую черту.

Синтаксис регулярного выражения

Синтаксис регулярных выражений в Python почти такой же, как в Perl, grep и некоторых других инструментах. Часть символов (в основном буквы и цифры) обозначают сами себя. Строка удовлетворяет (соответствует) шаблону, если она входит во множество строк, которые этот шаблон описывает.

Здесь стоит также отметить, что различные операции используют шаблон по–разному. Так, search ищет первое вхождение строки, удовлетворяющей шаблону, в заданной строке, а match требует, чтобы строка удовлетворяла шаблону с самого начала.

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

Газлайтер. Том 20

Володин Григорий Григорьевич
20. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.25
рейтинг книги
Газлайтер. Том 20

Дневники 1932-1947 гг

Бронтман Лазарь Константинович
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Дневники 1932-1947 гг

"Фантастика 2024-65". Компиляция. Книги 1-23

Призывающий Оро
Фантастика 2024. Компиляция
Фантастика:
фэнтези
боевая фантастика
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Фантастика 2024-65. Компиляция. Книги 1-23

Магия и религия в сновидениях

Ноар Кейла
Религия и эзотерика:
эзотерика
5.00
рейтинг книги
Магия и религия в сновидениях

Дарданелльское сражение

Шигин Владимир Виленович
Во славу земли русской
Проза:
историческая проза
5.00
рейтинг книги
Дарданелльское сражение

Неучтенный элемент. Том 5

NikL
5. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 5

Полное собрание рассказов

Воннегут Курт
Проза:
современная проза
5.00
рейтинг книги
Полное собрание рассказов

Шайтан Иван 5

Тен Эдуард
5. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
5.50
рейтинг книги
Шайтан Иван 5

Сумерки божков

Амфитеатров Александр Валентинович
1. Романы
Проза:
русская классическая проза
5.00
рейтинг книги
Сумерки божков

Том 11. По Руси. Рассказы 1912-1917

Горький Максим
11. Собрание сочинений в тридцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 11. По Руси. Рассказы 1912-1917

Избранное

Лалич Михаило
Мастера современной прозы
Проза:
военная проза
5.00
рейтинг книги
Избранное

Собрание сочинений. Т. 20. Плодовитость

Золя Эмиль
Проза:
классическая проза
5.00
рейтинг книги
Собрание сочинений. Т. 20. Плодовитость

Хроники былого и грядущего

allig_eri
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Хроники былого и грядущего

Рассказы

Фолкнер Уильям Катберт
Проза:
классическая проза
5.00
рейтинг книги
Рассказы