справочник по Python. мм isbn 9785932861578 9 785932 861578
Скачать 4.21 Mb.
|
357 Символ(ы) Описание \W Соответствует любому символу, не относящемуся к множе- ству \w. \Z Соответствует только концу строки. \\ Соответствует самому символу обратного слэша. Специальные символы \d, \D, \s, \S, \w и \W интерпретируются иначе при со- поставлении со строками Юникода. В данном случае они совпадают со все- ми символами Юникода, соответствующими описанным свойствам. На- пример, \d совпадает со всеми символами Юникода, которые классифици- руются как цифры, будь то европейские, арабские или индийские цифры, каждые из которых занимают различные диапазоны символов Юникода. Функции Ниже перечислены функции, которые используются для выполнения опе- раций сопоставления с шаблоном и замены: compile(str [, flags]) Компилирует строку с шаблоном регулярного выражения и создает объ- ект регулярного выражения. Этот объект может передаваться в аргументе pattern всем функциям, описываемым ниже. Данный объект также предо- ставляет ряд методов, которые описываются чуть ниже. В аргументе flags передается битная маска следующих флагов, объединенных битовой опе- рацией ИЛИ: Флаг Описание A или ASCII Сопоставление выполняется только с 8-битными символа- ми ASCII (только в Python 3). I или IGNORECASE Сопоставление выполняется без учета регистра символов. L или LOCALE При сопоставлении со специальными символами \w, \W, \b и \B используются региональные настройки. M или MULTILINE Обеспечивает совпадение символов ^ и $ с началом и кон- цом каждой строки в тексте, помимо начала и конца самого текста. (Обычно символы ^ и $ совпадают только с началом и концом всего текста.) S или DOTALL Обеспечивает совпадение символа точки (.) со всеми сим- волами, включая символ перевода строки. U или UNICODE При сопоставлении с символами \w, \W, \b и \B используется информация из базы данных о свойствах символов. (Толь- ко в Python 2. В Python 3 Юникод используется по умолча- Python 2. В Python 3 Юникод используется по умолча- . В Python 3 Юникод используется по умолча- Python 3 Юникод используется по умолча- 3 Юникод используется по умолча- нию.) X или VERBOSE Игнорирует неэкранированные пробельные символы и комментарии в строке шаблона. 358 Глава 16. Работа с текстом и строками escape(string) Возвращает строку, в которой все не алфавитно-цифровые символы экра- нированы символом обратного слэша. findall(pattern, string [,flags]) Возвращает список всех неперекрывающихся совпадений с шаблоном pattern в строке string, включая пустые совпадения. Если шаблон имеет группы, возвращает список фрагментов текста, совпавших с группами. Если в шаблоне присутствует более одной группы, каждый элемент в спи- ске будет представлен кортежем, содержащим текст из каждой группы. Аргумент flags имеет то же назначение, что и в функции compile(). finditer(pattern, string, [, flags]) То же, что и функция findall(), но вместо списка возвращает итератор. Данный итератор воспроизводит элементы типа MatchObject. match(pattern, string [, flags]) Проверяет наличие совпадения с шаблоном pattern в начале строки string. В случае успеха возвращает объект типа MatchObject, в противном случае возвращается None. Аргумент flags имеет то же назначение, что и в функ- ции compile(). search(pattern, string [, flags]) Отыскивает в строке string первое совпадение с шаблоном pattern. Аргу- Аргу- мент flags имеет то же назначение, что и в функции compile(). В случае успеха возвращает объект типа MatchObject; если совпадений не найдено, возвращается None. split(pattern, string [, maxsplit = 0]) Разбивает строку string по совпадениям с шаблоном pattern. Возвращает список строк, включая текст, совпавший с группами, присутствующими в шаблоне. В аргументе maxsplit передается максимальное количество вы- полняемых разбиений. По умолчанию выполняются все возможные раз- биения. sub(pattern, repl, string [, count = 0]) Замещает текстом repl самые первые неперекрывающиеся совпадения с шаблоном pattern в строке string. Аргумент repl может быть строкой или функцией. Если в этом аргументе передается функция, при вызове ей бу- дет передаваться объект типа MatchObject, и она должна возвращать стро- ку замены. Если в аргументе repl передается строка, в ней допускается использовать обратные ссылки на группы в шаблоне, такие как ‘\6’. Для ссылки на именованные группы можно использовать последовательность ‘\g< name>’ . Аргумент count определяет максимальное количество подстано- вок. По умолчанию замещаются все найденные совпадения. Эти функции не принимают аргумент flags, как функция compile(), тем не менее анало- гичного эффекта можно добиться, воспользовавшись нотацией (?iLmsux), описанной выше в этом разделе. Модуль re 359 subn(pattern, repl, string [, count = 0]) Т о же, что и sub(), но возвращает кортеж, содержащий новую строку и ко- личество выполненных подстановок. Объекты регулярных выражений Объект скомпилированного регулярного выражения r, который создается функцией compile(), обладает следующими атрибутами и методами: r.flags Значение аргумента flags, с которым был скомпилирован объект регуляр- ного выражения, или 0, если ни один из флагов не был указан. r.groupindex Словарь, отображающий символические имена групп, определяемых как r’(?P , в порядковые номера групп. r.pattern Строка шаблона, из которой был скомпилирован объект регулярного вы- ражения. r.findall(string [, pos [, endpos]]) Этот метод идентичен функции findall(). В аргументах pos и endpos пере- даются начальная и конечная позиция поиска. r.finditer(string [, pos [, endpos]]) Этот метод идентичен функции finditer(). В аргументах pos и endpos пере- даются начальная и конечная позиции поиска. r.match(string [, pos] [, endpos]) Проверяет наличие совпадения с шаблоном pattern в строке string. В ар- гументах pos и endpos передаются начальная и конечная позиции поиска. В случае успеха возвращает объект типа MatchObject, в противном случае возвращается None. r.search(string [, pos] [, endpos]) Отыскивает в строке string первое совпадение с шаблоном pattern. В аргу- ментах pos и endpos передаются начальная и конечная позиции поиска. В случае успеха возвращает объект типа MatchObject; если совпадений не найдено, возвращается None. r.split(string [, maxsplit = 0]) Этот метод идентичен функции split(). r.sub(repl, string [, count = 0]) Этот метод идентичен функции sub(). r.subn(repl, string [, count = 0]) Этот метод идентичен функции subn(). 360 Глава 16. Работа с текстом и строками Объекты MatchObject Э кземпляры класса MatchObject возвращаются функциями search() и match() и содержат информацию о группах, а также о позициях найденных совпа- дений. Экземпляр m класса MatchObject обладает следующими методами и атрибутами: m.expand(template) Возвращает строку, полученную заменой совпавших фрагментов экрани- рованными последовательностями в строке template. Обратные ссылки, та- кие как “\1” и “\2”, и именованные ссылки, такие как “\g ‘\\1’ m.group([group1, group2, ...]) Возвращает одну или более подгрупп в совпадении. Аргументы определя- ют номера групп или их имена. Если имя группы не задано, возвращает- ся совпадение целиком. Если указана только одна группа, возвращается строка, содержащая текст, совпавший с группой. В противном случае воз- вращается кортеж, содержащий совпадения со всеми указанными группа- ми. Если было запрошено содержимое группы с недопустимым именем или номером, возбуждает исключение IndexError. m.groups([default]) Возвращает кортеж, содержащий совпадения со всеми группами в шабло- не. В аргументе default указывается значение, возвращаемое для групп, не участвовавших в совпадении (по умолчанию имеет значение None). m.groupdict([default]) Возвращает словарь, содержащий совпадения с именованными группами. В аргументе default указывается значение, возвращаемое для групп, не участвовавших в сопоставлении (по умолчанию имеет значение None). m.start([group]) m .end([group]) Эти два метода возвращают индексы начала и конца совпадения с группой в строке. Если аргумент group опущен, возвращаются позиции всего совпа- дения. Если группа существует, но не участвовала в сопоставлении, воз- вращается None. m.span([group]) Возвращает кортеж из двух элементов (m.start(group), m.end(group)). Если совпадений с группой group не было обнаружено, возвращается кортеж (None, None) . Если аргумент group опущен, возвращаются позиции начала и конца всего совпадения. m.pos Значение аргумента pos, переданное методу search() или match(). Модуль re 361 m.endpos Значение аргумента endpos, переданное методу search() или match(). m.lastindex Числовой индекс последней совпавшей группы. Если ни одна группа не со- впала или в шаблоне нет ни одной группы, возвращается None или в шабло- не нет ни одной группы. m.lastgroup Имя последней совпавшей группы. Если ни одна группа не совпала или в шаблоне нет ни одной группы, возвращается None. m.re Объект регулярного выражения, чьим методом match() или search() был создан данный экземпляр класса MatchObject. m.string Строка, переданная методу match() или search(). Пример Следующий пример демонстрирует способы использования модуля re для поиска, извлечения и замены фрагментов текста в строке. import re text = “Guido will be out of the office from 12/15/2012 - 1/3/2013.” ёё # Шаблон регулярного выражения для поиска дат datepat = re.compile(‘(\d+)/(\d+)/(\d+)’) ёё # Найти и вывести все даты for m in datepat.finditer(text): print(m.group()) ёё # Отыскать все даты и вывести их в другом формате monthnames = [None,’Jan’,’Feb’,’Mar’,’Apr’,’May’,’Jun’, ‘Jul’,’Aug’,’Sep’,’Oct’,’Nov’,’Dec’] for m in datepat.finditer(text): print (“%s %s, %s” % (monthnames[int(m.group(1)], m.group(2), m.group(3))) ёё # Заменить все даты их значениями в европейском формате (день/месяц/год) def fix_date(m): return “%s/%s/%s” % (m.group(2),m.group(1),m.group(3)) newtext = datepat.sub(fix_date, text) ёё # Альтернативный способ замены newtext = datepat.sub(r’\2/\1/\3’, text) Примечания • Подробное описание теории и реализации поддержки регулярных вы- ражений можно найти в учебниках по устройству компиляторов. Кроме 362 Глава 16. Работа с текстом и строками того, полезно будет ознакомиться с книгой «Mastering Regular Expres- Mastering Regular Expres- Regular Expres- Regular Expres- Expres- Expres- sions» Джеффри Фридла (Jeffrey Friedl) (O’Reilly & Associates, 1997). 1 • Основные сложности, возникающие при работе с модулем re, – это соз- дание регулярных выражений. В их разработке вам может пригодиться такой инструмент, как Kodos (http://kodos.sourceforget.net). Модуль string Модуль string содержит множество констант и функций, которые могут пригодиться для обработки строк. В нем также объявляются классы, пред- назначенные для реализации новых механизмов форматирования строк. Константы Следующие константы определяют различные множества символов, кото- рые могут пригодиться в различных операциях над строками. Константа Описание ascii_letters Строка, содержащая все строчные и заглавные символы ASCII ascii_lowercase Строка ‘abcdefghijklmnopqrstuvwxyz’ ascii_uppercase Строка ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’ digits Строка ‘0123456789’ hexdigits Строка ‘0123456789abcdefABCDEF’ letters Конкатенация строк lowercase и uppercase lowercase Строка, содержащая все строчные символы, соответствующие текущим региональным настройкам системы octdigits Строка ‘01234567’ punctuation Строка с символами пунктуации из набора ASCII printable Строка печатаемых символов – комбинация значений letters, digits , punctuation и whitespace uppercase Строка, содержащая все заглавные символы, соответствую- щие текущим региональным настройкам системы whitespace Строка, содержащая все пробельные символы. В их число обычно входят: пробел, табуляция, перевод строки, возврат каретки, перевод формата и вертикальная табуляция Примечательно, что содержимое некоторых из этих констант (например, letters и uppercase) зависит от региональных настроек системы. 1 Фридл Д. «Регулярные выражения. 3-е издание». – Пер. с англ. – СПб.: Символ- Плюс, 2008. – Прим. перев. Модуль string 363 Объекты типа Formatter Строковый метод str.format() позволяет реализовать дополнительное фор- матирование строк. Как было показано в главе 3 «Типы данных и объек- ты» и в главе 4 «Операторы и выражения», этот метод способен обращать- ся к элементам последовательностей или словарей, к атрибутам объектов и выполнять другие подобные операции. В модуле string определен класс Formatter , который может использоваться для реализации нестандартных операций форматирования. Этот класс содержит атрибуты и методы, реа- лизующие операции форматирования строк, и позволяет изменять их. Formatter() Создает новый экземпляр класса Formatter. Экземпляр f класса Formatter поддерживает следующие операции. f.format(format_string, *args, **kwargs) Форматирует строку format_string. По умолчанию выводит ту же стро- По умолчанию выводит ту же стро- ку, что и метод format_string.format(*args, **kwargs). Например, вызов f.format(“{name} is {0:d} years old”, 39,name=”Dave”) вернет строку “Dave is 39 years old” f.vformat(format_string, args, kwargs) Метод, который фактически выполняет работу метода f.format(). В ар- гументе args передается кортеж позиционных аргументов, а в аргументе kwargs – словарь именованных аргументов. Если аргументы уже сохранены в кортеже и в словаре, можно использовать этот метод, так как он обладает более высокой скоростью работы. f.parse(format_string) Создает итератор для парсинга содержимого строки формата format_string. Итератор просматривает строку формата и воспроизводит кортежи вида ( literal_text, field_name, format_spec, conversion) . Поле literal_text содер- жит произвольный текст, предшествующий спецификатору формата, за- ключенному в фигурные скобки { ... }. Может содержать пустую строку, если перед спецификатором отсутствует какой-либо текст. Поле field_name содержит строку с именем поля в спецификаторе формата. Например, для спецификатора ‘{0:d}’ именем поля будет ‘0’. Поле format_spec содержит спецификатор формата, следующий за двоеточием, например в предыду- щем примере это поле будет содержать ‘d’. Может быть пустой строкой, если спецификатор не указан. Поле conversion содержит спецификатор пре- содержит спецификатор пре- спецификатор пре- спецификатор пре- пре- пре- образования (если присутствует). В предыдущем примере это поле будет содержать None, но, если бы использовался спецификатор ‘{0!s:d}’, поле con- version содержало бы ‘s’. Для последнего фрагмента строки формата все три поля field_name, format_spec и conversion будут содержать None. f.get_field(fieldname, args, kwargs) Извлекает из аргументов args и kwargs значение, ассоциированное с указан- ным именем поля fieldname. В аргументе fieldname передается строка, такая как “0” или “name”, которая возвращается методом parse(), представленным 364 Глава 16. Работа с текстом и строками выше, в поле field_name. Возвращает кортеж (value, key), где value – значе- ние поля fieldname, а key – ключ, использовавшийся для поиска значения в аргументах args или kwargs. Если key – целое число, оно интерпретируется как индекс в кортеже args. Если строка, она интерпретируется как ключ словаря kwargs. Аргумент fieldname может включать дополнительные опе- рации доступа к элементам последовательностей или к атрибутам, такие как ‘0.name’ или ‘0[name]’. В этом случае метод выполнит обращение к тре- буемому элементу и вернет соответствующее значение. Однако значение key в возвращаемом кортеже при этом будет иметь значение ‘0’. f.get_value(key, args, kwargs) Извлекает объект из аргумента args или kwargs, в зависимости от типа зна- чения key. Если key – целое число, объект извлекается из аргумента args. Если строка – из аргумента kwargs. f.check_unused_args(used_args, args, kwargs) Проверяет аргументы, не использованные в вызове format(). В аргументе used_args передается множество всех использованных ключей (смотрите описание get_field()), которые были найдены в строке форматирования. В аргументах args и kwargs передаются позиционные и именованные аргу- менты, полученные функцией format(). По умолчанию возбуждает исклю- чение TypeError, если будут обнаружены неиспользованные аргументы. f.format_value(value, format_spec) Форматирует единственное значение value в соответствии с указанным спецификатором формата format_spec. По умолчанию просто вызывает встроенную функцию format(value, format_spec). f.convert_field(value, conversion) Преобразует значение value, полученное в результате вызова метода get_ field() , в соответствии с указанным кодом преобразования conversion. Если в аргументе conversion передается None, возвращает оригинальное значение value . Если указан код преобразования ‘s’ или ‘r’, значение value преобра- зуется в строку вызовом функции str() или repr() соответственно. Если потребуется реализовать нестандартное форматирование строк, мож- но создать объект класса Formatter и просто использовать методы по умол- чанию для реализации собственного типа форматирования. Можно также определить новый класс, производный от класса Formatter, и переопреде- лить методы, описанные выше. Дополнительные подробности о синтаксисе спецификаторов формата и о фор- матировании строк приводятся в главах 3 и 4. Строки типа Template В модуле string объявляется новый строковый тип Template, который упро- щает некоторые операции подстановки. Пример использования этих строк приводится в главе 9. Модуль string 365 Н иже показано, как создать новый объект строки шаблона: Template(s) Здесь s – это строка, а Template – имя класса. Объект t класса Template поддерживает следующие методы: t.substitute(m [, **kwargs]) Этот метод принимает объект отображения m (например, словарь) или спи- сок именованных аргументов и выполняет подстановку значений имено- ванных аргументов в строку t. В процессе подстановки пары символов ‘$$’ замещаются единственным символом ‘$’, а фрагменты ‘$key’ или ‘${key}’ – значениями m[‘key’] или kwargs[‘key’], если методу были переданы имено- ванные аргументы. Ключи key в строке должны быть допустимыми иден- тификаторами Python. Если в окончательной строке остались неопознан- Python. Если в окончательной строке остались неопознан- . Если в окончательной строке остались неопознан- ные ключи ‘$key’, возбуждается исключение KeyError. t.safe_substitute(m [, **kwargs]) То же, что и substitute(), за исключением того, что этот метод не возбужда- ет исключение и не сообщает об ошибках. Неопознанные ключи $key оста- ются в строке в первоначальном виде. t.template Содержит оригинальную строку, переданную при вызове Template(). Изменить поведение класса Template можно, создав производный класс и переопределив атрибуты delimiter и idpattern. Например, ниже приводит- ся фрагмент, в котором символ экранирования $ заменен на @, а в именах ключей позволяет использовать только алфавитные символы: class MyTemplate(string.Template): delimiter = ‘@’ # Экранирующий символ idpattern = ‘[A-Z]*’ # Шаблон идентификаторов Вспомогательные функции В модуле string имеется также пара функций для выполнения операций над строками, которые не являются строковыми методами. capwords(s) Переводит в верхний регистр первые буквы каждого слова в строке s, заме- щает повторяющиеся пробельные символы единственным пробелом и уда- ляет начальные и конечные пробелы. maketrans(from, to) Создает таблицу преобразования, которая отображает каждый символ в строке from в символ, находящийся в той же позиции, в строке to. Строки from и to должны иметь одинаковую длину. Эта функция используется для создания аргументов, пригодных для использования строковым методом translate() 366 Глава 16. Работа с текстом и строками Модуль struct М одуль struct используется для преобразования данных на языке Python в структуры двоичных данных (представленные как строки байтов) и на- оборот. Такие структуры данных часто используются для организации взаимодействий с функциями, написанными на языке C, при работе с дво- C, при работе с дво- , при работе с дво- ичными файлами, сетевыми протоколами или для обмена двоичными дан- ными через последовательные порты. Функции упаковывания и распаковывания Ниже перечислены функции уровня модуля, используемые для упаковы- вания и распаковывания данных в строках байтов. Если в программе не- обходимо многократно выполнять эти операции, для этих целей можно ис- пользовать объект класса Struct, описываемый в следующем разделе. pack(fmt, v1, v2, ...) Упаковывает значения v1, v2 и так далее, в строку байтов, в соответствии со строкой формата fmt. pack_into(fmt, buffer, offset, v1, v2 ...) Упаковывает значения v1, v2 и так далее, в объект буфера, доступный для записи, начиная с позиции offset. Этот метод может действовать только с объектами, поддерживающими интерфейс буферов. В качестве примеров таких объектов можно назвать array.array и bytearray. unpack(fmt, string) Распаковывает содержимое строки байтов string в соответствии со строкой формата fmt. Возвращает кортеж распакованных значений. Длина строки string должна точно соответствовать размеру формата, который определя- ется функцией calcsize(). unpack_from(fmt, buffer, offset) Распаковывает содержимое объекта buffer в соответствии со строкой фор- мата fmt, начиная с позиции offset. Возвращает кортеж распакованных значений. calcsize(fmt) Вычисляет размер в байтах структуры, соответствующей строке формата fmt Объекты типа Struct Модуль struct объявляет класс Struct, который предоставляет альтерна- тивный интерфейс для операций упаковывания и распаковывания. Этот класс обеспечивает более высокую эффективность, так как строка формата интерпретируется всего один раз. Struct(fmt) Создает экземпляр класса Struct, представляющий данные, упакованные в соответствии с указанным кодом формата. Экземпляр s класса Struct об- Модуль struct 367 ладает следующими методами и действует так же, как и функции, описан- ные в предыдущем разделе: Метод Описание s.pack(v1, v2, ...) Упаковывает значения в строку байтов s.pack_into(buffer, offset, v1, v2, ...) Упаковывает значения в объект буфера s.unpack(bytes) Распаковывает значения из строки байтов s.unpack_from(buffer, offset) Распаковывает значения из объекта буфера s.format Используемый формат s.size Размер формата в байтах Коды форматов Строки форматов, используемые в модуле struct, являются последователь- ностями символов, которые имеют следующие значения: Формат Тип в языке C Тип в языке Python ‘x’ пустой байт Не имеет значения ‘c’ char Строка длиной 1 ‘b’ signed char Целое ‘B’ unsigned char Целое ‘?’ _Bool (C99) Логическое значение ‘h’ short Целое ‘H’ unsigned short Целое ‘i’ int Целое ‘I’ unsigned int Целое ‘l’ long Целое ‘L’ unsigned long Целое ‘q’ long long Длинное целое ‘Q’ unsigned long long Длинное целое ‘f’ float С плавающей точкой ‘d’ double С плавающей точкой ‘s’ char[] Строка ‘p’ char[] Строка с длиной в первом байте ‘P’ void * Целое Каждому символу формата может предшествовать целое число, определя- ющее количество повторений (например, ‘4i’ – это то же, что и ‘iiii’). Для 368 Глава 16. Работа с текстом и строками формата ‘s’ число обозначает максимальную длину строки, то есть формат ‘10s’ обозначает строку длиной до 10 байтов. Формат ‘0s’ обозначает строку нулевой длины. Формат ‘p’ используется для представления строк, длина которых определяется значением в первом байте, за которым следует сама строка. Этот формат может пригодиться для организации взаимодействий с программным кодом, написанным на языке Pascal, что иногда бывает не- Pascal, что иногда бывает не- , что иногда бывает не- обходимо в системе Macintosh. Обратите внимание, что длина таких строк не может превышать 255 символов. Когда для распаковывания двоичных данных используется формат ‘I’ или ‘L’ , возвращается длинное целое число. Кроме того, формат ‘P’ может воз- вращать целое или длинное целое число, в зависимости от размера машин- ного слова. Первый символ в строке формата может также определять порядок следо- вания байтов и выравнивание в упакованных данных, как показано ниже: Формат Порядок следования байтов Размер и выравнивание ‘@’ Определяется аппаратной архитек- турой Определяется аппаратной архи- тектурой ‘=’ Определяется аппаратной архитек- турой Стандартные ‘<’ Обратный порядок Стандартные ‘>’ Прямой порядок Стандартные ‘!’ Сетевой порядок (прямой) Стандартные Порядок следования байтов, определяемый аппаратной архитектурой, может быть прямым или обратным. Размеры и выравнивание, определяе- быть прямым или обратным. Размеры и выравнивание, определяе- быть прямым или обратным. Размеры и выравнивание, определяе- прямым или обратным. Размеры и выравнивание, определяе- прямым или обратным. Размеры и выравнивание, определяе- или обратным. Размеры и выравнивание, определяе- или обратным. Размеры и выравнивание, определяе- обратным. Размеры и выравнивание, определяе- обратным. Размеры и выравнивание, определяе- . Размеры и выравнивание, определяе- Размеры и выравнивание, определяе- мые аппаратной архитектурой, соответствуют значениям, используемым компилятором языка C, и зависят от реализации. Под стандартным вырав- C, и зависят от реализации. Под стандартным вырав- , и зависят от реализации. Под стандартным вырав- ниванием подразумевается отсутствие необходимости выравнивания для любого типа. Под стандартным размером подразумевается, что значение типа short имеет размер 2 байта, значение типа int – 4 байта, значение типа long – 4 байта, значение типа float – 32 бита и значение типа double – 64 бита. Для формата ‘P’ может использоваться только порядок следования байтов, определяемый аппаратной архитектурой. Примечания Иногда бывает необходимо выравнивать конец структуры в соответствии с требованиями, предъявляемыми определенным типом. Для этого в конец строки формата следует добавить код формата требуемого типа с числом по- вторений, равным нулю. Например, формат ‘llh0l’ указывает, что струк- тура должна заканчиваться на границе 4-байтового слова (предполагает- ся, что значения типа long выравниваются по границам 4-байтовых слов). В данном случае после значения типа short, определяемого кодом ‘h’, будут добавлены два пустых байта. Этот прием действует, только когда указы- вается, что размер и выравнивание определяются аппаратной архитекту- Модуль unicodedata 369 рой, – при стандартном подходе правила определения размера и выравни- вания не действуют. Форматы ‘q’ и ‘Q’ могут использоваться только в режиме «определяется ап- паратной архитектурой», если компилятор языка C, использованный для сборки интерпретатора Python, поддерживает тип long long. См. также Описание модуля array (стр. 328) и модуля ctypes (стр. 759). Модуль unicodedata Модуль unicodedata обеспечивает доступ к базе данных символов Юникода, которая содержит информацию о свойствах всех символов Юникода. bidirectional(unichr) Возвращает признак направления письма для символа unichr в виде стро- ки или пустую строку, если такое значение не определено. Возвращаемая строка может иметь одно из следующих значений: Значение Описание L Направление письма слева направо LRE Служебный символ, определяющий направление письма cлева направо внутри текста, который записывается справа налево LRO Служебный символ, определяющий направление письма cлева направо, независимо от направления письма в тексте R Направление письма cправа налево AL Арабский символ, направление письма cправа налево RLE Служебный символ, определяющий направление письма справа налево внутри текста, который записывается слева направо RLO Служебный символ, определяющий направление письма справа налево, независимо от направления письма в тексте Служебный символ, отменяет предыдущее направление письма EN Европейское число ES Разделитель европейских чисел ET Конец европейского числа AN Арабское число CS Универсальный разделитель чисел NSM Знак, не занимающий дополнительного пространства BN Нейтральная граница B Разделитель абзацев 370 Глава 16. Работа с текстом и строками Значение Описание S Разделитель сегментов WS Пробельный символ ON Прочие нейтральные символы category(unichr) Возвращает строку, описывающую основную категорию, к которой отно- сится символ unichr. Возвращаемая строка может иметь одно из следую- щих значений: Значение Описание Lu Буква, заглавная Ll Буква, строчная Lt Буква, с которой начинается слово, когда только первая буква слова записывается как заглавная Mn Знак, не занимающий дополнительного пространства Mc Знак, занимающий дополнительное пространство Me Объемлющий знак Nd Число, десятичная цифра Nl Число, буква No Число, прочие символы Zs Разделитель, пробельный символ Zl Разделитель строк Zp Разделитель абзацев Cc Управляющий символ Cf Неотображаемый символ, признак форматирования Cs Прочие, суррогатная пара Co Прочие, предназначен для закрытого использования Cn Прочие, символ не присвоен Lm Буква, модификатор Lo Буква, прочие Pc Знак пунктуации, соединяющий слова Pd Знак пунктуации, дефис Ps Знак пунктуации, открывающая скобка Pe Знак пунктуации, закрывающая скобка Pi Знак пунктуации, открывающие кавычки (продолжение) Модуль unicodedata 371 Значение Описание Pf Знак пунктуации, закрывающие кавычки Po Знак пунктуации, прочие Sm Символ, математический Sc Символ, знак денежной единицы Sk Символ, модификатор So Символ, прочие combining(unichr) Возвращает целое число, описывающее класс объединения для символа unichr или 0, если класс объединения не определен. Возвращается одно из следующих значений: Значение Описание 0 Пробел, разделитель, признак переупорядочения, дополнитель- ный знак тибетского алфавита 1 Комбинационный знак; описывает или вписывается внутрь основного символа 7 Знак нюкта (Nukta, индийский алфавит) 8 Знак транскрипции для алфавита Хирагана/Катакана 9 Вирама 10-199 Классы фиксированных позиций 200 Присоединяется снизу слева 202 Присоединяется снизу 204 Присоединяется снизу справа 208 Присоединяется слева 210 Присоединяется справа 212 Присоединяется сверху слева 214 Присоединяется сверху 216 Присоединяется сверху справа 218 Снизу слева 220 Снизу 222 Снизу справа 224 Слева 226 Справа 228 Сверху слева 230 Сверху 372 Глава 16. Работа с текстом и строками Значение Описание 232 Сверху справа 233 Двойной снизу 234 Двойной сверху 240 Снизу (подстрочный знак) decimal(unichr [, default]) Возвращает десятичное целое значение цифрового символа unichr. Если unichr не является десятичной цифрой, возвращается значение аргумента default или возбуждается исключение ValueError, если этот аргумент опущен. decomposition(unichr) Возвращает строку, содержащую разложение символа unichr или пустую строку, если разложение не определено. Обычно символы, содержащие знаки акцента, могут быть разложены в многосимвольные последователь- ности. Например, вызов decomposition(u”\u00fc”) (символ “ь”) вернет строку “0075 0308” , соответствующую букве u и знаку акцента (Ё). Строка, возвра- щаемая этой функцией, может также включать следующие строки: Значение Описание Вариант шрифта (например, готический) Неразрывный пробел или дефис Форма начального представления (Арабский алфавит) Форма промежуточного представления (Арабский алфавит) Форма окончательного представления (Арабский алфавит) Форма изолированного представления (Арабский алфавит) Форма символов, заключенных в кружок Надстрочная форма Подстрочная форма Форма вертикального представления Широкий (или дзенкаку) символ совместимости (японский алфа- вит) Узкий (или ханкаку) символ совместимости (японский алфавит) Форма уменьшенного представления (для совместимости с ки- тайскими символами) Шрифт квадратной формы для китайского, японского и корей- ского языков Простейшая дробь Прочие символы совместимости (продолжение) Модуль unicodedata 373 digit(unichr [, default]) Возвращает целое значение цифрового символа unichr. Если unichr не явля- ется цифрой, возвращается значение аргумента default или возбуждается исключение ValueError, если этот аргумент опущен. Эта функция отличает- ся от функции decimal() тем, что может принимать символы, которые мо- гут представлять цифры, но не являются десятичными цифрами. east_asian_width(unichr) Возвращает строку, обозначающую ширину символа unichr для восточно- азиатских языков. lookup(name) Отыскивает символ по его имени. Например, вызов lookup(‘COPYRIGHT SIGN’) вернет соответствующий символ Юникода. Наиболее распространенные имена символов можно найти по адресу http://www.unicode.org/charts. mirrored(unichr) Возвращает 1, если символ unichr является зеркально отражаемым при двунаправленном письме, в противном случае возвращает 0. Зеркально от- ражаемым называется тот символ, чей внешний вид должен изменяться при отображении текста в обратном порядке. Например, символ ‘(‘ являет- ся зеркально отражаемым, потому что при выводе текста справа налево его следует отразить в символ ‘)’. name(unichr [, default]) Возвращает имя символа Юникода unichr. Возбуждает исключение ValueEr- ror , если имя не определено, или возвращает значение аргумента default, если он не был опущен. Например, вызов name(u’\xfc’) вернет ‘LATIN SMALL LETTER U WITH DIAERESIS’ normalize(form, unistr) Нормализует строку Юникода unistr в соответствии с нормальной формой form . В аргументе form можно передать строку ‘NFC’, ‘NFKC’, ‘NFD’ или ‘NFKD’. Нормализация строки в определенной степени связана с композицией и де- композицией определенных символов. Например, строка Юникода со сло- вом «resumй» может быть представлена как u’resum\u00e9’ или как u’resume\ u0301’ . В первом случае акцентированный символ й представлен одним символом, а во втором он представлен буквой e, за которой следует при- соединяемый знак акцента (ґ). При использовании формы нормализации ‘NFC’ строка unistr будет преобразована так, что будет содержать только скомпонованные символы (так, символ й будет представлен единственным символом). При использовании формы нормализации ‘NFD’ строка unistr будет преобразована так, что будет содержать комбинационные знаки (на- пример, символ й будет представлен буквой e, за которой следует знак ак- цента). При использовании форм ‘NFKC’ и ‘NFKD’ нормализация выполняется так же, как и при использовании форм ‘NFC’ и ‘NFD’, за исключением того, что в этом случае дополнительно выполняется преобразование некоторых символов, которые могут быть представлены больше чем одним символом Юникода. Например, римским цифрам соответствуют собственные симво- лы Юникода, но они также могут быть представлены символами латинско- 374 Глава 16. Работа с текстом и строками го алфавита I, V, M и так далее. При использовании форм ‘NFKC’ и ‘NFKD’ спе- циальные символы римских цифр будут преобразованы в их эквиваленты с использованием символов латинского алфавита. numeric(unichr [, default]) Возвращает числовое значение символа Юникода в виде числа с плаваю- щей точкой. Если числовое значение не определено, возвращает значение аргумента default или возбуждает исключение ValueError. Например, символ U+2155 (символ, изображающий дробь “1/5”) имеет числовое значение 0.2. unidata_version Строка, содержащая номер версии базы данных символов Юникода (на- пример, ‘5.1.0’). Примечание Дополнительные сведения о базе данных символов Юникода можно найти по адресу: http://www.unicode.org. |