import StringIO my_string = "1234567890" f1 = StringIO.StringIO() 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

import StringIO my_string = "1234567890" f1 = 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']

 

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

Примечание:

 

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

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 49; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.008 с.)