WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 7 |

«Г. Россум, Ф.Л.Дж. Дрейк, Д.С. Откидач Язык программирования Python Г. Россум, Ф.Л.Дж. Дрейк, Д.С. Откидач, М. Задка, М. Левис, С. Монтаро, Э.С. Реймонд, А.М. Кучлинг, М.-А. Лембург, К.-П. Йи, Д. Ксиллаг, ...»

-- [ Страница 4 ] --

В случае успеха функция возвращает кортеж вида ‘(file, pathname, description)’, где file — файл, открытый для чтения, с указателем, уста новленным на начало, pathname — полное имя файла модуля и description — один из кортежей в списке get_suffixes(), описывающий тип модуля. Если модуль не находится в файле, то file равен None, pathname — имени модуля, а description содержит пустые строки (суффикс и режим). Если модуль не най ден, генерируется исключение ImportError. Другие исключения указывают на проблемы с аргументами или окружением.

Эта функция не обрабатывает иерархические имена модулей. Для того, чтобы най ти P.M, то есть модуль M пакета P, найдите и загрузите модуль P, затем исполь зуйте функцию find_module() с аргументом path, равным P.path.

load_module(name, file, filename, description) Загружает модуль. Если модуль до этого уже был импортирован, вызов функции load_module() эквивалентен вызову встроенной функции reload(). Аргумент name является полным именем модуля (то есть включает имя пакета). Аргументы 212 Глава 15. Служебные модули file и filename — файловый объект, открытый для чтения, и имя соответствую щего файла (None и имя модуля, если модуль загружается не из файла). Аргумент description должен быть кортежем, описывающим тип модуля. Все необходи мые аргументы, кроме имени модуля, возвращаются функцией find_module().

Если модуль успешно загружен, функция возвращает объект-модуль. В противном случае генерируется исключение (обычно ImportError). Заметим, что после за грузки модуля файл file (если он не равен None) необходимо закрыть, даже если было сгенерировано исключение. Лучше всего это делать в ветви finally инструкции try.

new_module(name) Возвращает новый пустой объект-модуль с именем name. Этот объект не добавля ется в список sys.modules.

Модуль определяет следующие целочисленные константы, описывающие тип мо дуля:

PY_SOURCE Файл с исходным текстом на языке Python.

PY_COMPILED Байт-компилированный файл.

C_EXTENSION Динамически загружаемая библиотека.

PY_RESOURCE Ресурс в операционной системе Macintosh.

PKG_DIRECTORY Каталог пакета.

C_BUILTIN Встроенный модуль.

PY_FROZEN Вложенный модуль (модуль на языке Python, зашитый в интерпретатор).

Для совместимости с ранними версиями интерпретатора модуль также определяет несколько устаревших констант и функций. Хорошие примеры использования описанных здесь возможностей Вы найдете в стандартных модулях knee (этот модуль присутствует только в качестве примера — не следует считать его стандартным интерфейсом) и rexec.

15.8 pprint — представление и вывод данных в более при влекательном виде 15.8. pprint — представление и вывод данных в более... Этот модуль предоставляет возможность получить форматированное представление про извольных объектов языка Python. Аналогично встроенной функции repr(), возвраща емый результат обычно можно использовать в качестве аргумента встроенной функции eval(). Если длина представления вложенных объектов больше разрешенного значе ния, представление каждого объекта будет расположено на отдельной строке.

Модуль определяет один класс:

PrettyPrinter([keyword_list]) Этот конструктор воспринимает несколько именованных аргументов (keyword_list). Поток вывода может быть установлен с помощью аргу мента с именем stream (должен быть объектом с методом write()). Если поток вывода не задан, используется sys.stdout. Аргументы с именами indent, depth и width определяют формат представления. indent определяет отступ (количество пробелов) каждого последующего уровня вложенных объектов, по умолчанию равен 1. depth определяет максимальный уровень вложенных объектов, которые будут представлены — представление объектов на следующем уровне заменяется на ‘...’. Если аргумент с таким именем не задан или его значение ложно, ограничений на количество уровней нет. Длина отдельных строк в представлении будет ограничена значением аргумента с именем width (по умолчанию 80 символов).

>>> import pprint, sys >>> stuff = sys.path[:] >>> stuff.insert(0, stuff[:]) >>> pp = pprint.PrettyPrinter(indent=4) >>> pp.pprint(stuff) [ [ ’’, ’/usr/local/lib/python1.5’, ’/usr/local/lib/python1.5/test’, ’/usr/local/lib/python1.5/sunos5’, ’/usr/local/lib/python1.5/sharedmodules’, ’/usr/local/lib/python1.5/tkinter’], ’’, ’/usr/local/lib/python1.5’, ’/usr/local/lib/python1.5/test’, ’/usr/local/lib/python1.5/sunos5’, ’/usr/local/lib/python1.5/sharedmodules’, ’/usr/local/lib/python1.5/tkinter’] >>> >>> import parser >>> suite = parser.suite(open(’pprint.py’).read()) >>> tup = parser.ast2tuple(suite)[1][1][1] >>> pp = pprint.PrettyPrinter(depth=6) >>> pp.pprint(tup) (266, (267, (307, (287, (288, (...)))))) Для простоты использования модуль также определяет несколько функций, исполь зующих формат представления по умолчанию:

214 Глава 15. Служебные модули pformat(object) Возвращает строку с форматированным представлением объекта.

pprint(object [, stream]) Выводит форматированное представление объекта object (с символом новой стро ки на конце) в файл stream. Если аргумент stream не задан, используется sys.stdout. Эта функция может быть использована в интерактивном режиме для контроля значений.

>>> stuff = sys.path[:] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [, ’’, ’/usr/local/lib/python1.5’, ’/usr/local/lib/python1.5/test’, ’/usr/local/lib/python1.5/sunos5’, ’/usr/local/lib/python1.5/sharedmodules’, ’/usr/local/lib/python1.5/tkinter’] isreadable(object) Возвращает 1, если представление объекта object может быть использовано для его восстановления с помощью функции eval(), иначе возвращает 0. Всегда воз вращает 0 для рекурсивных объектов.

>>> pprint.isreadable(stuff) isrecursive(object) Возвращает 1, если объект содержит рекурсивные ссылки, иначе возвращает 0.

saferepr(object) Выводит неформатированное представление объекта object с рекурсивными ссылками, представленными в виде ‘’, где type и id — тип и идентификатор объекта.

Экземпляры класса PrettyPrinter имеют следующие методы, принимающие во внимание значения именованных аргументов, переданных конструктору:

pformat(object) Возвращает стоку с форматированным представлением объекта object.

pprint(object) Выводит форматированное представление объекта object (с символом новой стро ки на конце) в файл, указанный при конструировании экземпляра.

isreadable(object) Возвращает 1, если представление объекта object может быть использовано для 15.9. repr — альтернативная реализация функции repr() его восстановления с помощью функции eval(), иначе возвращает 0. Всегда воз вращает 0 для рекурсивных объектов и если объект содержит больше вложенных уровней, чем было разрешено при конструировании экземпляра.

isrecursive(object) Возвращает 1, если объект содержит рекурсивные ссылки, иначе возвращает 0.

15.9 repr — альтернативная реализация функции repr() Этот модуль позволяет получать представление объектов аналогично встроенной функ ции repr(), но с ограничением размера получаемой строки. Эти возможности исполь зуются, например, отладчиком языка Python.

Модуль определяет следующие имена:

Repr() Класс, предоставляющий возможности, полезные для реализации функций, анало гичных встроенной функции repr(). Во избежание генерации чрезмерно больших представлений включает ограничение размеров для различных типов объектов.

aRepr Экземпляр класса Repr. Используется для реализации функции repr(), описан ной ниже. Изменение атрибутов этого объекта отразится на ограничениях разме ров, используемых функцией repr() и, соответственно, отладчиком.

repr(object) Ссылается на метод repr() экземпляра aRepr. Возвращает строковое представ ление, аналогичное возвращаемому встроенной функцией repr(), но с ограниче ниями по размеру.

Экземпляры класса Repr предоставляют несколько атрибутов данных, которые могут быть использованы для установки ограничений размеров представлений объектов различных типов, и методы, возвращающие представления объектов этих типов:

maxlevel Максимальный уровень вложенности объектов, включаемых в представление. По умолчанию равен 6.

maxdict maxlist maxtuple Максимальное число элементов, включаемых в представление для словарей, спис ков и кортежей соответственно. По умолчанию включается представление четырех элементов словарей и шести элементов списков и кортежей.

216 Глава 15. Служебные модули maxlong Максимальное число символов в представлении длинных целых чисел. Цифры опускаются в середине. По умолчанию равно 40.

maxstring Максимальное число символов в представлении строки. Заметим, что в качестве исходного функция использует стандартное представление. Если исходное пред ставление содержит управляющие последовательности, в итоговом представлении они могут быть искажены. По умолчанию максимальное число символов равно 30.

maxother Максимальное число символов в представлении других типов, по умолчанию равно 20.

repr(object) Возвращает строковое представление, аналогичное возвращаемому встроенной функцией repr(), но с указанными ограничениями по размеру.

repr1(object, level) Этот метод вызывается рекурсивно методом repr(). Использует тип объекта object для того, чтобы определить, какой метод вызвать для получения пред ставления.

repr_typename(object, level) Методы, предназначенные для получения представления объектов определенно го типа. Имя метода конструируется из имени типа, в котором пробелы заме нены символами подчеркивания, путем добавления приставки ’repr_’. Методы, предназначенные для получения представления объектов определенного типа, вы зываются методом repr1() и сами должны вызывать repr1() для вложенных объектов с аргументом level, меньше на единицу.

Определяя классы, производные от класса Repr, Вы можете добавить поддержку для других типов объектов или изменить поведение для поддерживаемых типов. Сле дующий пример показывает, каким образом можно реализовать поддержку файловых объектов:

import repr import sys class MyRepr(repr.Repr):

def repr_file(self, obj, level):

if obj.name in [’’, ’’, ’’]:

return obj.name else:

return ‘obj‘ aRepr = MyRepr() print aRepr.repr(sys.stdin) # ’’ Глава Работа со строками Модули, описанные в этой главе, предоставляют широкий диапазон операций над стро ками.

string Наиболее распространенные операции над строками.

re Операции с регулярными выражениями.

StringIO Работа со строками как с файловыми объектами.

cStringIO Более быстрый вариант модуля StringIO.

codecs Регистрация кодеров и работа с ними.

16.1 string — наиболее распространенные операции над строками Модуль string определяет несколько строковых констант, содержащих символы, кото рые относятся к определенному классу. Их значения зависят от текущих национальных установок (см. описание модуля locale).

digits Десятичные цифры (’0123456789’).

hexdigits Символы, используемые для записи шестнадцатеричного представления (’0123456789abcdefABCDEF’).

letters Объединение строк lowercase и uppercase, описанных ниже.

lowercase Строка, содержащая все строчные буквы (буквы в нижнем регистре).

octdigits Символы, используемые для записи восьмеричного представления (’01234567’).

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

218 Глава 16. Работа со строками printable Строка символов, которые считаются печатными. Является комбинацией констант digits, letters, punctuation и whitespace.

uppercase Строка, содержащая все прописные буквы (буквы в верхнем регистре).

whitespace Строка, содержащая все символы пропуска (whitespace). Обычно это ’\t\n\v\f\r ’ Модуль также определяет следующие функции:

maketrans(from, to) Возвращает строку, которая может быть использована в методе translate() строк для того, чтобы произвести замену символов в строке from на символы, находящиеся в той же позиции в строке to. Строки from и to должны иметь одинаковую длину. Не используйте в качестве аргументов строки, производные от констант lowercase и uppercase — они могут иметь разную длину.

zfill(s, width) Дополняет слева нулями строку s, представляющую число, до тех пор, пока длина строки не будет равной width. Строки, начинающиеся знаком, обрабатываются корректно.

Перечисленные ниже функции оставлены для совместимости, их следует исполь зовать только в тех случаях, когда необходимо сохранить возможность выполнение программы со старыми версиями интерпретатора. Начиная с версии 1.6, возможности, предоставляемые этими функциями, доступны через методы обычных строк и строк Unicode или встроенные функции.

atof(s) Возвращает float(s).

atoi(s [, base]) Возвращает int(s, base).

atol(s [, base]) Возвращает long(s, base).

capitalize(word) Возвращает word.capitalize().

capwords(s [, sep]) Разбивает строку на слова, используя в качестве разделителя sep, делает первую букву каждого слова прописной и возвращает объединение (через разделитель sep) полученных слов. Обратите внимание, что серии из символов пропуска при этом в начале и конце строки удаляются, а в середине строки заменяются одним 16.1. string — наиболее распространенные операции над строками пробелом. Метод строк title() работает аналогично, но сохраняет исходные символы пропуска.

expandtabs(s [, tabsize]) Возвращает s.expandtabs(tabsize).

find(s, sub [, start [, end]]) Возвращает s.find(sub, start, end).

rfind(s, sub [, start [, end]]) Возвращает s.rfind(sub, start, end).

index(s, sub [, start [, end]]) Возвращает s.index(sub, start, end).

rindex(s, sub [, start [, end]]) Возвращает s.rindex(sub, start, end).

count(s, sub [, start [, end]]) Возвращает s.count(sub, start, end).

lower(s) Возвращает s.lower().

split(s [, sep [, maxsplit]]) splitfields(s [, sep [, maxsplit]]) Возвращает s.split(sep, maxsplit).

join(words [, sep]) joinfields(words [, sep]) Возвращает sep.join(words).

lstrip(s) Возвращает s.lstrip().

rstrip(s) Возвращает s.rstrip().

strip(s) Возвращает s.strip().

swapcase(s) Возвращает s.swapcase().

translate(s, table [, deletechars]) Возвращает s.translate(table, deletechars), но работает только с обыч ными строками.

upper(s) Возвращает s.upper().

220 Глава 16. Работа со строками ljust(s, width) Возвращает s.ljust(width).

rjust(s, width) Возвращает s.rjust(width).

center(s, width) Возвращает s.center(width).

replace(s, old, new [, maxsplit]) Возвращает s.replace(old, new, maxsplit).

16.2 re — операции с регулярными выражениями Этот модуль предоставляет операции с регулярными выражениями, аналогичные тем, которые используются в языке Perl. Обрабатываемые строки (обычные и строки Unicode) могут содержать любые символы, в том числе NUL.

В регулярных выражениях символ обратной косой черты (‘\’) используется в ка честве специального символа, что конфликтует с его использованием с той же целью в строковых литеральных выражениях языка Python. Например, регулярное выражение, соответствующее символу обратной косой черты, должно быть записано как ’\\\\’, так как само регулярное выражение должно быть ‘\\’ и каждый символ обратной косой черты в литеральном выражении должен быть записан как ‘\\’. Выход из этой ситуа ции — использовать для шаблонов необрабатываемую запись строковых литералов (см.

раздел 11.2.1).

16.2.1 Синтаксис регулярных выражений Регулярное выражение (regular expression) — это шаблон, который определяет мно жество строк, ему удовлетворяющих. Функции, определенные в модуле re позволяют определить, удовлетворяет ли определенная строка данному регулярному выражению (или, что то же самое, регулярное выражение строке).

Объединение регулярных выражений также является регулярным выражением. Ес ли строка a удовлетворяет регулярному выражению A и строка b удовлетворяет регуляр ному выражению B, то a + b удовлетворяет A + B. Таким образом, сложные регуляр ные выражения могут быть сконструированы из примитивных выражений, описанных ниже.

Регулярные выражения могут содержать как обычные символы, так и специальные управляющие последовательности. Большинство обычных символов, таких как ‘A’, ‘a’ или ‘0’, являются простейшими регулярными выражениями, удовлетворяющими самим себе. Вы можете объединять обычные символы, так выражению ’list’ удовлетворяет строка ’list’.

16.2. re — операции с регулярными выражениями Ниже приведены символы и последовательности, которые имеют специальное зна чение (atom — “неделимое” выражение, то есть обычный символ или последователь ность, обозначающая класс или группу;

expr — произвольное выражение):

Последовательность Назначение. (точка) В режиме по умолчанию удовлетворяет любому символу, кроме символа новой строки (’\n’). Если был задан флаг DOTALL, удовлетворяет любому символу, включая символ новой строки.

^ (символ вставки) В режиме по умолчанию удовлетворяет началу строки. Если был задан флаг MULTILINE, также удовлетворяет пустой строке сразу после символа новой строки.

$ В режиме по умолчанию удовлетворяет концу строки. Если был задан флаг MULTILINE, также удовлетворяет пустой строке непосредственно перед символом новой строки.

atom* Удовлетворяет наибольшему возможному количеству (0 или более) фрагментов строки, удовлетворяющих выражению atom. Например, выражению ’ab*’ удовлетворяют строки ’a’, ’ab’, ’abb’ и т. д.

atom+ Удовлетворяет наибольшему возможному количеству (1 или более) фрагментов строки, удовлетворяющих выражению atom. Например, выражению ’ab+’ удовлетворяют строки ’ab’, ’abb’ и т. д., но не удовлетворяет строка ’a’.

atom? Удовлетворяет наибольшему возможному количеству (0 или 1) фрагментов строки, удовлетворяющих выражению atom.

Например, выражению ’ab?’ удовлетворяют строки ’a’ и ’ab’.

{m,[n]} Удовлетворяет наибольшему возможному количеству (от m до n) фрагментов строки, удовлетворяющих выраже нию atom. Например, выражению ’a{3,5}’ удовлетворяют строки ’aaa’, ’aaaa’ и ’aaaaa’. Если число n опущено, оно считается равным бесконечности.

atom*? Удовлетворяет наименьшему возможному количеству (0 или более) фрагментов строки, удовлетворяющих выражению atom. Например, регулярное выражение ’<.*>’ удовле творяет всей строке ’

title

’, в то время как ’<.*?>’ удовлетворяет только ’

’.

atom+? Удовлетворяет наименьшему возможному количеству (1 или более) фрагментов строки, удовлетворяющих выражению atom.

atom?? Удовлетворяет наименьшему возможному количеству (0 или 1) фрагментов строки, удовлетворяющих выражению atom.

222 Глава 16. Работа со строками Последовательность Назначение {m,[n]}? Удовлетворяет наименьшему возможному количеству (от m до n) фрагментов строки, удовлетворяющих выражению atom.

[chars] Используется для описания множества символов. chars мо жет включать в себя символы, диапазоны символов и классы (предопределенные множества символов). Специальные по следовательности (кроме тех, которые начинаются с символа обратной косой черты) внутри квадратных скобок не являют ся активными. Например, выражению ’[ab?]’ удовлетво ряют символы ’a’, ’b’ и ’?’, выражению ’[a-z]’ — все строчные буквы латинского алфавита, а выражению ’[a zA-Z0-9]’ — все буквы латинского алфавита и цифры.

Если Вы хотите включить в множество символ ‘]’ или ‘ ’, поместите его первыми или используйте символ обратной косой черты: ’[]]’, r’[]\-]’. Символ ‘^’ в множестве на оборот, не должен идти первым, должен быть единственным символом в множестве или записанным с использованием обратной косой черты.

[^chars] Удовлетворяет любому символу, не входящему в множество ’[chars]’.

expr1|expr2 Удовлетворяет строкам, удовлетворяющим выражению expr1 или expr2, где expr1 и expr2 — произвольные регулярные выражения. Таким образом Вы можете соеди нить произвольное количество выражений. Будет использо вано первое из них, при котором все регулярное удовлетво ряет строке.

(expr) Делает выражение expr “неделимым” и образует группу.

Фрагмент строки, удовлетворяющий группе в данном кон тексте, может быть извлечен после выполнения операции со поставления, а также может быть использован далее в этом же регулярном выражении с помощью специальной последо вательности r’\number’, описанной ниже.

(?options) Такая запись не образует группу и не используется для сопоставления, а лишь устанавливает опции для всего ре гулярного выражения. options может содержать буквы ‘i’, ‘L’, ‘m’, ‘s’, ‘u’, ‘t’ и ‘x’, которые соответствуют фла гам IGNORECASE, LOCALE, MULTILINE, DOTALL, UNICODE, TEMPLATE и VERBOSE. Может быть полезна, если Вы хо тите включить флаги в регулярное выражение вместо того, чтобы передавать их функции compile().

(?:expr) Как и запись ’(expr)’ делает выражение expr “недели мым”, но в отличие от последней не образует группы.

16.2. re — операции с регулярными выражениями Последовательность Назначение (?Pexpr) Работает аналогично записи ’(expr)’ и, кроме того, делает доступным фрагмент строки, удовлетворяющий выражению expr, через имя name, то есть делает группу именованной.

Имя группы должно быть корректным идентификатором язы ка Python. Именованные группы так же, как и обычные, ну меруются и доступны через запись r’\number’.

(?P=name) Удовлетворяет тексту, который ранее удовлетворил выраже нию, указанному в группе с именем name.

(?#comment) Комментарий, игнорируется.

(?=expr) Удовлетворяет пустой строке, но только если за ней следует текст, удовлетворяющий выражению expr. Например, вы ражению ’ (?=)’ удовлетворяет фраг мент ’ ’ в строке ’ ’.

(?!expr) Удовлетворяет пустой строке, но только если за ней следует текст, который не удовлетворяет выражению expr. Напри мер, выражению ’ (?!)’ удовлетворя ет фрагмент ’ ’ в строке ’ ’, но не в строке ’ ’.

(?<=expr) Удовлетворяет пустой строке, но только если перед ней сле дует текст, который удовлетворяет выражению expr. Напри мер, выражению ’(?<=abc)def’ удовлетворяет фрагмент ’def’ в строке ’abcdef’. Выражение expr должно всегда удовлетворять строке одной длины. Например, Вы можете использовать ’abc’ или ’a|b’, но не ’a*’. Возможность использования такого синтаксиса присутствует, начиная с версии 2.0.

(?

Выражение expr должно всегда удовлетворять строке од ной длины. Например, Вы можете использовать ’abc’ или ’a|b’, но не ’a*’. Возможность использования такого син таксиса присутствует, начиная с версии 2.0.

\number Удовлетворяет содержимому группы с номером number.

Группы нумеруются с 1. Например, выражению r’(.+) \1’ удовлетворяют строки ’the the’ и ’55 55’, но не удовле творяет строка ’the end’. Эта специальная последователь ность может быть использована для ссылок на группы с но мерами до 99. Если в числе number первая цифра 0, number содержит три восьмеричные цифры или последовательность содержится в определении множества (’[chars]’), такая специальная последовательность будет интерпретироваться как символ с восьмеричным кодом number.

224 Глава 16. Работа со строками Последовательность Назначение \A Удовлетворяет только началу строки.

\b Удовлетворяет пустой строке в начале или конце сло ва1. Слово определяется как последовательность из букв, цифр и символов подчеркивания. В определении множества (’[chars]’) последовательность r’\b’ для совместимости с литеральными выражениями Python интерпретируется как символ возврата на одну позицию (BS).

\B Удовлетворяет пустой строке в середине слова.

\d Удовлетворяет любой десятичной цифре, эквивалентна мно жеству ’[0-9]’. При использовании флага LOCALE или UNICODE удовлетворяет символу, который в данном языке или в базе данных Unicode считается десятичной цифрой.

\D Удовлетворяет любому символу, не являющемуся десятич ной цифрой;

эквивалентна множеству ’[^0-9]’. При ис пользовании флага LOCALE или UNICODE удовлетворяет символу, который в данном языке или в базе данных Unicode не считается десятичной цифрой.

\s Удовлетворяет любому символу пропуска (whitespace), эк вивалентна множеству r’[\t\n\v\f\r ]’. При использо вании флага LOCALE или UNICODE удовлетворяет символу, который в данном языке или в базе данных Unicode считает ся символом пропуска.

\S Удовлетворяет любому символу, не являющемуся сим волом пропуска (whitespace), эквивалентна множеству r’[^\t\n\v\f\r ]’.При использовании флага LOCALE или UNICODE удовлетворяет символу, который в данном языке или в базе данных Unicode не считается символом пропуска.

\w Удовлетворяет любому символу, являющемуся буквой, циф рой или символом подчеркивания. Если не был установлен флаг LOCALE, эквивалентна множеству ’[a-zA-Z0-9_]’.

С установленным флагом LOCALE или UNICODE удовлетво ряет символу подчеркивания и символу, который в данном языке или в базе данных Unicode считается буквой или цифрой.

\W Удовлетворяет любому символу, не входящему в класс r’\w’, то есть эквивалентна множеству r’^\w’.

\Z Удовлетворяет только концу строки.

В текущих реализациях эта специальная последовательность не работает корректно при использова нии национальных установок (флаг LOCALE), отличных от ’C’.

16.2. re — операции с регулярными выражениями Последовательность Назначение \char Удовлетворяет символу char, где char — символ, кото рый, будучи использованным в данном контексте без симво ла обратной косой черты, обозначает начало какой-либо из описанных выше управляющих последовательностей.

16.2.2 Сопоставление в сравнении с поиском Модуль re предоставляет две примитивные операции с регулярными выражениями: со поставление (match) и поиск (search). Если для Вас привычна семантика использования регулярных выражений в языке Perl, поиск — это то, что Вам нужно (см. описания функции search() и одноименного метода объектов, представляющих компилирован ные регулярные выражения).

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

>>> import re >>> from operator import truth >>> truth(re.match(’a’, ’ba’)) >>> truth(re.search(’a’, ’ba’)) При поиске специальный символ ’^’ в многострочном режиме (флаг MULTILINE) поми мо начала строки удовлетворяет позиции сразу после символа перехода на новую строку (’\n’), в то время как при сопоставлении ’^’ независимо от режима удовлетворяет только началу строки:

>>> import re >>> from operator import truth >>> re_obj = re.compile(’.*^a’, re.M) >>> truth(re_obj.match(’\na’)) >>> truth(re_obj.search(’\na’)) 16.2.3 Функции и константы, определенные в модуле compile(pattern [, flags]) Компилирует регулярное выражение в строке pattern и возвращает представляю щий его объект. Поведением регулярного выражения можно управлять с помощью аргумента flags. Значение аргумента flags может быть составлено из описан ных ниже констант с помощью оператора |.

226 Глава 16. Работа со строками Последовательность инструкций prog = re.compile(pat) result = prog.match(str) эквивалентна инструкции result = re.match(pat, str) Однако использование compile() более эффективно, если регулярное выражение предполагается использовать неоднократно.

IGNORECASE I Используется, если необходимо выполнить сопоставление или поиск без учета регистра букв. Использование этого флага совместно с флагом LOCALE в версиях интерпретатора 1.5.2 и более ранних бессмысленно, а иногда (если используемая кодировка не является надмножеством ASCII) и опасно.

LOCALE L Делает классы r’\w’, r’\W’, r’\b’ и r’\B’ зависящими от текущих нацио нальных установок (используются национальные установки на момент выполнения операции сопоставления или поиска, а не компиляции регулярного выражения).

MULTILINE M Устанавливает многострочный режим, в котором специальные символы ’^’ (толь ко при выполнении поиска) и ’$’ (при выполнении как сопоставления, так и поиска) удовлетворяют не только началу и концу строки, но и сразу после и перед символом ’\n’ соответственно.

DOTALL S Делает специальный символ ’.’ удовлетворяющим любому символу. Без этого флага ’.’ удовлетворяет любому символу, кроме ’\n’.

VERBOSE X Использование этого флага позволяет писать регулярные выражения в более эле гантном виде:

•Символы пропуска (whitespace) в строке-шаблоне игнорируются, за исключе нием определений множеств и записанных с использованием обратной косой черты.

•Все символы до конца строки после ‘#’, за исключением случаев, когда ‘#’ содержится в определении множества или записан с использованием обратной косой черты (r’\#’), считаются комментарием и игнорируются.

TEMPLATE T Устанавливает “режим шаблона”: поиск производится без отката назад в случае неудачи во время перебора. Эта опция является экспериментальной (ее поддержка может быть удалена в будущих версиях);

доступна, начиная с версии 1.6.

16.2. re — операции с регулярными выражениями UNICODE U Делает классы r’\w’, r’\W’, r’\b’ и r’\B’ интернациональными (в соответ ствии с классами символов в Unicode). Опция доступна, начиная с версии 1.6.

Приведенные ниже функции воспринимают в качестве аргумента pattern как строку, так и объект, представляющие компилированное регулярное выражение. Если необходимо установить флаги, используйте компилированное регулярное выражение или специальную последовательность вида ’(?flags)’ в строке.

search(pattern, string [, flags]) Ищет в строке string позицию, в которой она удовлетворяет регулярному выра жению pattern и возвращает объект, представляющий результат сопоставления.

Если такая позиция не найдена, возвращает None.

match(pattern, string [, flags]) Если 0 или более символов в начале строки string удовлетворяют регулярному выражению pattern, возвращает объект, представляющий результат сопоставле ния, в противном случае возвращает None.

split(pattern, string [, maxsplit]) Разбивает строку string в местах, удовлетворяющих регулярному выражению pattern и возвращает результат в виде списка. Если pattern содержит группи рующие скобки, то текст групп также включается в возвращаемый список. Если задан и не равен 0 аргумент maxsplit, выполняется не более maxsplit расщеп лений и остаток строки помещается в конец списка. Например:

>>> re.split(’\W+’, ’Words, words, words.’) [’Words’, ’words’, ’words’, ’’] >>> re.split(’(\W+)’, ’Words, words, words.’) [’Words’, ’, ’, ’words’, ’, ’, ’words’, ’.’, ’’] >>> re.split(’\W+’, ’Words, words, words.’, 1) [’Words’, ’words, words.’] findall(pattern, string) Возвращает список непересекающихся фрагментов строки string, удовлетворя ющих регулярному выражению pattern. Если pattern содержит группы, эле ментами списка будут строки, удовлетворяющие группе, или кортеж строк, если групп в шаблоне несколько. Результаты сопоставления с нулевой длиной также включаются в результат.

sub(pattern, repl, string [, count]) Возвращает строку, полученную заменой непересекающихся фрагментов строки string, удовлетворяющих регулярному выражению pattern, на repl. Если не найдено ни одного такого фрагмента, строка возвращается неизменной. repl мо жет быть строкой или функцией. Функция должна воспринимать один аргумент — объект, представляющий результат сопоставления, и возвращать строку для заме ны. Например:

228 Глава 16. Работа со строками >>> def dashrepl(matchobj):

.... if matchobj.group(0) == ’-’: return ’ ’.... else: return ’-’ >>> re.sub(’-{1,2}’, dashrepl, ’pro----gram-files’) ’pro--gram files’ Если задан и не равен 0 аргумент count, он определяет максимальное число производимых замен. По умолчанию число замен не ограничено.

Замена удовлетворяющего регулярному выражению фрагмента нулевой длины про изводится только в том случае, если он не является смежным с предыдущим таким фрагментом. Таким образом, ‘sub(’x*’, ’-’, ’abc’)’ возвращает ’-a-b-c-’.

Если repl является строкой, то обрабатываются содержащиеся в ней специальные последовательности, представляющие символы или ссылки на группы. Например, r’\n’ заменяется символом новой строки, r’\6’ (или r’\g<6>’) — фрагментом, удовлетворяющим шестой группе, и r’\g’ — фрагментом, удовлетворяющим группе с именем id.

subn(pattern, repl, string [, count]) Выполняет те же самые операции, что и функция sub(), но возвращает кортеж, состоящий из новой строки и числа произведенных замен.

escape(string) Возвращает регулярное выражение, пригодное для поиска вхождений строки string, то есть записывает с использованием обратной косой черты символы строки, имеющие специальное значение в регулярных выражения.

error Класс исключений, которые генерируются, если используемое регулярное выраже ние содержит ошибки (например, несоответствие группирующих скобок), а также при возникновении некоторых других ошибок. Несоответствие строки шаблону ни когда не является ошибкой.

16.2.4 Объекты, представляющие регулярные выражения Компилированные объекты регулярных выражений имеют следующие методы и атрибу ты данных:

search(string [, pos [, endpos]]) Ищет в строке string позицию, в которой она удовлетворяет регулярному вы ражению и возвращает объект, представляющий результат сопоставления. Если такая позиция не найдена, возвращает None. Необязательные аргументы pos и endpos имеют такое же значение, как и для метода match(), описанного ниже.

match(string [, pos [, endpos]]) Если 0 или более символов в начале строки string удовлетворяют регулярно му выражению, возвращает объект, представляющий результат сопоставления, в противном случае возвращает None.

16.2. re — операции с регулярными выражениями Необязательный аргумент pos (по умолчанию равен 0) указывает позицию в стро ке, начиная с которой необходимо выполнять сопоставление. Использование этого аргумента не эквивалентно вызову метода для string[pos:], так как в пер вом случае специальные последовательности ’^’ и r’\A’ удовлетворяют началу реальной строки. Аналогично аргумент endpos указывает позицию в строке, до которой будет выполняться сопоставление.

split(string [, maxsplit]) Вызов этого метода эквивалентен вызову функции split() с объектом, представ ляющим регулярное выражение, в качестве первого аргумента.

findall(string) Вызов этого метода эквивалентен вызову функции findall() с объектом, пред ставляющим регулярное выражение, в качестве первого аргумента.

sub(repl, string [, count]) Вызов этого метода эквивалентен вызову функции sub() с объектом, представля ющим регулярное выражение, в качестве первого аргумента.

subn(repl, string [, count]) Вызов этого метода эквивалентен вызову функции subn() с объектом, представ ляющим регулярное выражение, в качестве первого аргумента.

flags Значение аргумента flags, переданного функции compile() при компиляции объекта. Этот атрибут не отражает флаги, установленные с помощью специальных последовательностей в самом регулярном выражении.

groupindex Словарь, отображающий имена групп к их номерам (пустой, если регулярное вы ражение не содержит именованных групп).

pattern Строка, содержащая регулярное выражение, которое было использовано при ком пиляции объекта.

16.2.5 Объекты, представляющие результат сопоставления Объекты, возвращаемые методами search() и match() компилированных регулярных выражений, а также одноименными функциями, имеют следующие методы и атрибуты данных:

group([group1 [, group2...]]) Возвращает один или более фрагментов, которые при выполнении операции со поставления удовлетворили определениям одной или нескольких групп. Числа groupN указывают на группы с номерами от 1 до 99 или на фрагмент, удовле творяющий всему регулярному выражению (группа с номером 0). groupN может 230 Глава 16. Работа со строками быть также именем группы, заданной в регулярном выражении с помощью синтак сиса ’?Pexpr’. Если шаблон не содержит группы с указанным номером (именем), генерируется исключение IndexError.

С одним аргументом метод group() возвращает одну строку, с несколькими ар гументами — кортеж из строк (по строке для каждого указанного номера груп пы), без аргументов — строку, удовлетворяющую всему регулярному выражению (как если бы метод был вызван с одним аргументом, равным 0). Если регулярное выражение какой-либо группы не было удовлетворено фрагментом строки, возвра щаемое значение для этой группы будет None вместо строки. Если же оно было удовлетворено несколько раз, в возвращаемое значение включается только послед ний результат.

Приведем небольшой пример. После выполнения инструкции m = re.match(r"(?P\d+)\.(\d*)", ’3.14’) m.group(1) и m.group(’int’) возвращают ’3’, а m.group(2) возвращает ’14’.

groups([default]) Возвращает кортеж из фрагментов, которые при выполнении операции сопостав ления удовлетворили определениям всех групп, содержащихся в регулярном вы ражении. default используются в качестве значения по умолчанию для групп, которые не удовлетворяют никакому фрагменту. Если аргумент default не задан, в таких случаях всегда используется None.

groupdict([default]) Возвращает словарь, отображающий имена групп к фрагментам, которым эти груп пы удовлетворяют. default используется в качестве значения по умолчанию для групп, которые не удовлетворяют никакому фрагменту. Если аргумент default не задан, в таких случаях всегда используется None.

start([group]) end([group]) Возвращает позиции начала и конца фрагмента в исходной строке, который удовлетворяет группе с номером (или именем) group (по умолчанию ис пользуется 0, что соответствует всему регулярному выражению). Если груп па не удовлетворяют никакому фрагменту, возвращают -1. Фрагмент, удовле творяющий группе g, то есть m.group(g), может быть также получен как m.string[m.start(g):m.end(g)].

span([group]) Возвращает кортеж ‘(m.start(group), m.end(group))’, где m — объект, к которому применяется метод. Обратите внимание, что, если группа не удовлетво ряют никакому фрагменту, метод возвращает ‘(-1, -1)’.

expand(template) В шаблоне template заменяет специальные последовательности, ссылающиеся на символы (например, ‘\n’) и удовлетворяющие фрагменты объекта (‘\1’, ‘\g<1>’, 16.3. StringIO и cStringIO — работа со строками как с... ‘\g’) аналогично методу sub() и возвращает результат. Этот метод досту пен, начиная с версии 2.0.

pos Значение аргумента pos, переданного функции (методу) search() или match().

endpos Значение аргумента endpos, переданного функции (методу) search() или match().

lastgroup Имя последней удовлетворенной группы (наиболее охватывающей) или None, если эта группа не имеет имени или не была удовлетворена ни одна группа. Например:

>>> import re >>> re.match(’(?Pa)(?Pb(?Pc))’,... ’abc’).lastgroup ’g2’ lastindex Номер последней удовлетворенной группы (наиболее охватывающей) или None, если не была удовлетворена ни одна группа. Например:

>>> import re >>> re.match(’(?Pa)(?Pb(?Pc))’,... ’abc’).lastindex re Объект компилированного регулярного выражения, который использовался для вы полнения операции поиска или сопоставления.

string Значение аргумента string, переданного функции (методу) search() или match().

16.3 StringIO и cStringIO — работа со строками как с файловыми объектами Модуль StringIO реализует класс StringIO, экземпляры которого ведут себя анало гично файловым объектам, но работает не с реальным файлом, а со строковым буфе ром. Модуль cStringIO, реализованный на C (и поэтому более быстрый), предостав ляет аналогичный интерфейс, за исключением того, что вместо класса он определяет функцию-конструктор StringIO(). Объекты, возвращаемые этой функцией, ведут се бя аналогично экземплярам класса StringIO.

232 Глава 16. Работа со строками Экземпляры класса StringIO поддерживают как обычные строки, так и стро ки Unicode. Однако следует быть осторожным при использовании одновременно обоих типов — если обычная строка содержит символы с установленным восьмым битом, методы write() и close() могут сгенерировать исключение UnicodeError. Объек ты, созданные конструктором cStringIO.StringIO() поддерживают только обычные строки: строки Unicode, передаваемые методу write(), автоматически преобразуются и, если это невозможно, генерируется исключение UnicodeError.

StringIO([string]) Создает и возвращает объект, представляющий строковой буфер. Если задан ар гумент string, он используется в качестве начального содержимого буфера, в противном случае создается пустой объект. Указатель у создаваемого объекта все гда устанавливается на начало буфера.

Конструктор StringIO(), определенный в модуле cStringIO возвращает объек ты разного типа в зависимости от наличия аргумента. В случае, если конструктор вызван с аргументом (должен быть обычной строкой, иначе будет сгенерировано исключение ValueError), Вы можете только читать информацию из созданного строкового буфера. При вызове без аргументов возвращаемый объект допускает как чтение, так и запись.

InputType (в модуле cStringIO) Тип объекта, созданного вызовом функции cStringIO.StringIO() со строкой в качестве аргумента.

OutputType (в модуле cStringIO) Тип объекта, созданного вызовом функции cStringIO.StringIO() без аргумен тов.

Объекты, возвращаемые конструктором StringIO() поддерживают операции, ха рактерные для файловых объектов, а также имеют дополнительный метод:

getvalue() Возвращает содержимое буфера в виде строки. Этот метод может быть вызван в любое время, до того как буфер был закрыт с помощью метода close().

16.4 codecs — регистрация кодеров и работа с ними Доступен, начиная с версии 1.6.

Этот модуль определяет базовые классы для кодеров и предоставляет доступ к внутреннему реестру кодеров.

16.4. codecs — регистрация кодеров и работа с ними register(search_function) Регистрирует search_function как функцию для поиска кодеров. Функция search_function вызывается с одним аргументом — именем кодировки, за писанной строчными буквами, и должна возвращать кортеж объектов, поддержи вающих вызов, ‘(encoder, decoder, stream_reader, stream_writer)’.

encoder и decoder должны иметь интерфейс, аналогичный методам encode() и decode() экземпляров класса Codec, описанного ниже. stream_reader и stream_writer должны быть конструкторами, возвращающими объекты анало гичные экземплярам классов StreamReader и StreamWriter соответственно.

Если search_function не может найти объекты для данной кодировки, она должна вернуть None.

lookup(encoding) Ищет в реестре кодеров средства работы с кодировкой encoding и возвращает кортеж объектов ‘(encoder, decoder, stream_reader, stream_writer)’, описанный выше. Если объекты для данной кодировки не найдены, генерируется исключение LookupError.

Для упрощения работы с файлами и другими потоками, содержащими данные в определенной кодировке, модуль определяет следующие функции:

open(filename [, mode [, encoding [, errors [, buffering]]]]) Открывает файл с именем filename в кодировке encoding и возвращает фай ловый объект (экземпляр класса StreamReaderWriter, описанного ниже), обес печивающий прозрачное кодирование/декодирование данных при записи/чтении.

Аргумент mode указывает режим, в котором открывается файл (по умолчанию используется ’rb’). Во избежание потери данных файл всегда открывается в дво ичном режиме. Аргумент errors определяет поведение при ошибках и может иметь значения ’strict’ (в случае возникновения ошибки генерируется исклю чение ValueError или производного от него класса;

используется по умолча нию), ’ignore’ (ошибки игнорируются) или ’replace’ (используется подходя щий символ замены, обычно ’\uFFFD’). Аргумент buffering имеет такое же значение, как и для встроенной функции open().

EncodedFile(file, input [, output, [errors]]) Возвращает файловый объект (экземпляр класса StreamRecoder, описанного ни же), обеспечивающий прозрачное перекодирование при работе с потоком file (файловый объект). Данные в файле хранятся в кодировке output, в то время как строки передаваемые методам write() и writelines() и возвращаемые метода ми read(), readline() и readlines() содержат данные в кодировке input. В качестве промежуточной кодировки обычно используется Unicode. Если кодировка output не задана, она считается равной input. Аргумент errors имеет такое же значение, как и для функции open().

234 Глава 16. Работа со строками Модуль определяет следующие классы, которые могут быть использованы в каче стве базовых:

Codec() Базовый класс для кодеров/декодеров. Производные от него классы должны реа лизовать следующие методы:

encode(input [, errors]) Должен возвращать кортеж из строки, полученной при кодировании input, и количества обработанных символов.

decode(input [, errors]) Должен возвращать кортеж из строки, полученной при раскодировании input, и количества обработанных символов.

StreamWriter(stream [, errors]) Базовый класс для файловых объектов, обеспечивающих прозрачное кодирование данных при записи его в поток stream. Этот класс является производным от клас са Codec и использует для кодирования свой метод encode(), который должен быть переопределен в производном классе.

StreamReader(stream [, errors]) Базовый класс для файловых объектов, обеспечивающих прозрачное декодирова ние данных при чтении их из потока stream. Этот класс является производным от класса Codec и использует для декодирования свой метод decode(), который должен быть переопределен в производном классе.

Для упрощения реализации методов encode() и decode() классов, производных от Codec, могут быть полезны следующие функции:

charmap_encode(input, errors, encoding_map) Кодирует строку input, используя отображение кодов символов encoding_map.

Возвращает результат в том виде, в котором должен возвращать метод encode().

charmap_decode(input, errors, encoding_map) Декодирует строку input, используя отображение кодов символов encoding_map. Возвращает результат в том виде, в котором должен возвращать метод decode().

Хорошими примерами использования описанных выше классов могут служить ис ходные тексты модулей пакета encodings.

Экземпляры приведенных ниже классов возвращаются функциями open() и EncodedFile():

StreamReaderWriter(stream, Reader, Writer [, errors]) Создает файловый объект, обеспечивающий доступ на чтение с кодированием (че рез объект Reader(stream, errors)) и запись с декодированием (через объект Writer(stream, errors)) к потоку stream.

16.4. codecs — регистрация кодеров и работа с ними StreamRecoder(stream, encode, decode, Reader, Writer [, errors]) Экземпляры этого класса обеспечивают прозрачное перекодирование при работе с потоком file (файловый объект). Данные в файле хранятся в кодировке output, в то время как строки передаваемые методам write() и writelines() и воз вращаемые методами read(), readline() и readlines() содержат данные в кодировке input.

Следующие константы могут быть полезны при чтении и записи файлов, формат которых зависит от платформы:

BOM BOM_BE BOM_LE BOM32_BE BOM32_LE BOM64_BE BOM64_LE Эти константы определяют метки, которые используются для обозначения поряд ка следования байтов (byte order mark, BOM). Константа BOM равна BOM_BE или BOM_LE и определяет “родной” порядок следования для данной платформы. Суф фиксы ‘_BE’ и ‘_LE’ обозначают соответственно big-endian и little-endian.

Глава Средства интернационализации Средства, описанные в этой главе, позволяют писать программы, учитывающие нацио нальные установки пользователя.

locale Использование национальных особенностей.

gettext Выдача сообщений на родном языке.

17.1 locale — использование национальных особенностей Модуль locale позволяет работать с различными языками, не зная национальных и культурных особенностей каждой страны. Изначально система использует стандартные национальные установки (с именем ’C’).

Error Исключения этого класса генерируются функцией setlocale(), если установки не могут быть изменены.

setlocale(category [, locale]) Если задан аргумент locale, изменяет текущие национальные установки кате гории category. Аргумент locale является именем, характеризующим нацио нальную принадлежность (locale). Если аргумент locale равен пустой строке, используются пользовательские установки по умолчанию. Начиная с версии 2.0, Вы можете использовать в качестве locale кортеж из двух строк: кода языка и кодировки. В случае успешного изменения установок, возвращает новое имя, в противном случае генерирует исключение Error.

Если аргумент locale опущен или равен None, возвращает текущие установки для категории category.

На большинстве платформ использование функции setlocale() небезопасно в многопоточных программах. Обычно приложения начинаются со следующих строк:

import locale locale.setlocale(locale.LC_ALL,’’) Это позволяет использовать пользовательские установки по умолчанию для всех 17.1. locale — использование национальных особенностей категорий1. Если национальные установки после этого не меняются, у Вас не долж но возникнуть проблем с использованием нескольких потоков.

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

’decimal_point’ (категория LC_NUMERIC) Символ, используемый в качестве десятичной точки.

’grouping’ (категория LC_NUMERIC) Список чисел, указывающих, в каких относительных пози циях ожидается использование группирующего разделителя localeconv()[’thousands_sep’]. Если последовательность закан чивается символом CHAR_MAX, разделитель далее не используется. Если последовательность заканчивается нулем, далее повторно используется последний размер группы.

’thousands_sep’ (категория LC_NUMERIC) Символ, используемый в качестве разделителя между группами.

’int_curr_symbol’ (категория LC_MONETARY) Международное обозначение национальной валюты (в соответствии со стан дартом ISO 4217).

’currency_symbol’ (категория LC_MONETARY) Местное обозначение национальной валюты.

’mon_decimal_point’ (категория LC_MONETARY) Символ, используемый в качестве десятичной точки в денежных суммах.

’mon_grouping’ (категория LC_MONETARY) Имеет такой же формат, как и localeconv()[’grouping’]. Используется для денежных сумм.

’mon_thousands_sep’ (категория LC_MONETARY) Символ, используемый в качестве разделителя между группами в денежных суммах.

’positive_sign’ (категория LC_MONETARY) ’negative_sign’ (категория LC_MONETARY) Символы, используемые для обозначения положительных и отрицательных денежных сумм.

’int_frac_digits’ (категория LC_MONETARY) ’rac_digits’ (категория LC_MONETARY) Число цифр после десятичной точки для международных и местных сумм.

’p_cs_precedes’ (категория LC_MONETARY) ’n_cs_precedes’ (категория LC_MONETARY) 0, если символ валюты указывается после суммы, и 1, если символ валюты В ОС Windows используются разные кодировки для консольных и графических приложений, для русского языка это cp866 и Unicode. Однако установки по умолчанию подразумевают кодировку, которая использовалась в старых версиях Windows в графическом режиме — cp1251. Поэтому использование национальных установок по умолчанию в Windows, к сожалению, не имеет смысла.

238 Глава 17. Средства интернационализации указывается перед суммой, для положительных и отрицательных денежных сумм соответственно.

’p_sep_by_space’ (категория LC_MONETARY) ’n_sep_by_space’ (категория LC_MONETARY) 1, если сумма и символ валюты должны быть разделены пробелом, иначе 0, для положительных и отрицательных денежных сумм соответственно.

’p_sign_posn’ (категория LC_MONETARY) ’n_sign_posn’ (категория LC_MONETARY) Указывает, в каком формате должна быть выведена денежная сумма со знаком (соответственно положительным и отрицательным): 0 — сумма и символ ва люты заключаются в скобки, 1 — знак указывается перед суммой и символом валюты, 2 — после суммы и символа валюты, 3 — непосредственно перед сим волом валюты, 4 — непосредственно после символа валюты и CHAR_MAX — формат не установлен.

CHAR_MAX Символическая константа, обычно используется в словаре, возвращаемом функци ей localeconv(), если формат не установлен.

getdefaultlocale([envvars]) Пытается определить пользовательские национальные установки по умолчанию для данной категории и возвращает их в виде кортежа из строк с кодом языка и ко дировкой (вместо строки может быть None, если значение не может быть опре делено)2. Если установки по умолчанию не могут быть определены с помощью системного вызова, используются переменные окружения с именами, приведенны ми в списке envvars (по умолчанию используется ‘[’LANGUAGE’, ’LC_ALL’, code’LC_CTYPE’, ’LANG’]’). Функция доступна, начиная с версии 2.0.

getlocale([category]) Возвращает текущие установки для категории category в виде кортежа из строк с кодом языка и кодировкой (вместо строки может быть None, если значение не может быть определено). Аргумент category может быть любой константой вида LC_*, кроме LC_ALL;

по умолчанию используется LC_CTYPE. Функция доступна, начиная с версии 2.0.

normalize(locale) Возвращает нормализованное имя национальных установок. Если имя locale не может быть нормализовано, оно возвращается без изменений. Если в исходном имени не указана кодировка, используется кодировка по умолчанию для данного языка (ISO8859-5 для русского). Функция доступна, начиная с версии 2.0.

resetlocale([category]) Изменяет текущие национальные установки для категории category (по умолча нию LC_ALL) на пользовательские установки по умолчанию3. Функция доступна, В Windows NT getdefaultlocale() возвращает верное значение, которое, однако, не может быть использовано в качестве аргумента функции setlocale(), так как последняя требует имя национальных установок в своем (не стандартном) виде. Ситуация возможно изменится в будущих версиях языка.

Не работает в Windows NT из-за несовместимости функций getdefaultlocale() и setlocale() (см. также сноску 2).

17.1. locale — использование национальных особенностей начиная с версии 2.0.

strcoll(string1, string2) (категория LC_COLLATE) Производит лексикографическое сравнение строк string1 и string2 в соответ ствии с текущими национальными установками. Как и другие функции сравнения возвращает положительное, отрицательное число или 0 в зависимости от того, рас полагается строка string1 до или после string2 или строки равны. Строки не должны содержать символов ’\000’.

strxfrm(string) (категория LC_COLLATE) Преобразует строку таким образом, чтобы можно было проводить более быстрое сравнение с помощью встроенной функции cmp() (или операторов сравнения) и результат был таким же, какой возвращает функция strcoll(). Строка не должна содержать символов ’\000’.

format(format, val [, grouping]) (категория LC_NUMERIC) Возвращает строковое представление числа с учетом текущих национальных уста новок. Строка формата следует соглашениям, принятым для оператора %. Функция принимает во внимание местный символ десятичной точки и, если задан и является истиной аргумент grouping, группирует соответствующим образом цифры.

str(float) (категория LC_NUMERIC) Возвращает строковое представление числа аналогично встроенной функции str(), но использует символ десятичной точки в соответствии с текущими на циональными установками.

atof(string) (категория LC_NUMERIC) Преобразует строку, содержащую представление вещественного числа в соответ ствии с текущими национальными установками, в вещественное число и возвра щает его.

atoi(string) (категория LC_NUMERIC) Преобразует строку, содержащую представление целого числа в соответствии с текущими национальными установками, в целое число и возвращает его.

Ниже перечислены константы, которые могут использоваться в качестве первого аргумента функции setlocale() (категории национальных установок):

LC_CTYPE От установок этой категории зависит поведение методов обычных строк и функций модуля string, предназначенных для анализа и изменения регистра букв.

LC_COLLATE От установок этой категории зависит поведение функций strcoll() и strxfrm().

LC_TIME От установок этой категории зависит поведение функции time.strftime().

240 Глава 17. Средства интернационализации LC_MONETARY Категория для формата денежных сумм (см. описание функции localeconv() выше).

LC_MESSAGES (UNIX) Эта категория обычно определяет язык выводимых сообщений. Однако в настоя щих реализациях интерпретатора установки этой категории не используются (см.

описание модуля gettext).

LC_NUMERIC Категория, определяющая формат чисел. Влияет на поведение функций format(), atoi(), atof() и str(), определенных в этом модуле.

LC_ALL Комбинация всех категорий. При использовании этой константы для изменения текущих установок функция setlocale() пытается изменить установки для всех категорий. Если изменение хотя бы для одной категории невозможно, установки для всех категорий остаются прежними. Если Вы используете LC_ALL для опре деления текущих установок, возвращается строка, указывающая установки для каждой категории. Эта строка может быть использована в дальнейшем для восста новления установок.

17.2 gettext — выдача сообщений на родном языке Модуль gettext предоставляет возможность модулям и приложениям выдавать со общения на родном языке пользователя. Этот модуль поддерживает как интерфейс к каталогу сообщений GNU gettext, так и основанный на классах интерфейс более вы сокого уровня, который больше подходит для кода на языке Python. В обоих случаях Вы пишите модуль или приложение с сообщениями на одном естественном языке и предоставляете каталог переведенных сообщений на другие языки.

Замечание: в текущих реализациях язык, на который осуществляется пе ревод, не зависит от национальных установок, выбранных с помощью функции locale.setlocale(), а выбирается в зависимости от значений переменных окруже ния LANGUAGE, LC_ALL, LC_MESSAGES и LANG (первая из них, имеющая непустое значение) или указывается явно. Далее мы будем обозначать строку с кодом выбранного языка как language.

17.2.1 Интерфейс GNU gettext Используя интерфейс GNU gettext, Вы затрагиваете все приложение. Обычно это то, что нужно для одноязычных приложений. Если же Вы пишите модуль или Вашему приложению необходимо менять язык “на лету”, Вам следует использовать интерфейс основанный на классах.

17.2. gettext — выдача сообщений на родном языке bindtextdomain(domain [, localedir]) Привязывает домен с именем domain к каталогу localedir. В дальней шем модуль gettext будет искать двоичный файл с переведенными сообще ниями с путем os.path.join(localedir, language, ’LC_MESSAGES’, domain +’.mo’). Если аргумент localedir опущен или равен None, возвраща ет каталог, к которому на данный момент привязан домен domain (по умолчанию используется каталог ‘os.path.join(sys.prefix, ’share’, ’locale’)’).

textdomain([domain]) Если задан и не равен None аргумент domain, возвращает текущий домен, ина че устанавливает глобальный (для всего приложения) домен равным domain и возвращает его.

gettext(message) Возвращает перевод сообщения message на язык, соответствующий текущим на циональным установкам. Поиск перевода производится в базе данных сообщений для текущего домена. Обычно эта функция используется под именем _() в гло бальном пространстве имен приложения (см. пример ниже).

dgettext(domain, message) Работает аналогично функции gettext(), но ищет перевод в базе данных для домена domain.

GNU gettext также определяет функцию dcgettext(), однако она считается бес полезной и поэтому на данный момент не реализована.

Приведем пример типичного использования описанного интерфейса:

import gettext gettext.textdomain(’myapplication’) _ = gettext.gettext...

#, :

print _(’This is a translatable string.’)...

17.2.2 Интерфейс, основанный на классах Этот интерфейс предоставляет большие гибкость и удобства, чем интерфейс GNU gettext. Поэтому мы рекомендуем его для использования в модулях и приложениях, на писанных на языке Python. Модуль gettext определяет “класс-переводчик”, который реализует чтение ‘.mo’-файлов и предоставляет методы, возвращающие обычные строки или строки Unicode с переводом. Экземпляры этого класса могут установить функцию _() во встроенном пространстве имен.

242 Глава 17. Средства интернационализации find(domain [, localedir [, languages]]) Эта функция реализует стандартный алгоритм поиска ‘.mo’-файлов для до мена domain в каталоге localedir для языков, перечисленных в строке languages (по умолчанию используется значение одной из переменных окруже ния: LANGUAGE, LC_ALL, LC_MESSAGES или LANG). Строка languages (или одна из перечисленных переменных окружения) должна содержать список через двоеточие кодов языков в порядке убывания их приоритета. Функция find() воз вращает путь к ‘.mo’-файлу, из которого следует брать перевод сообщения. Если ни один из файлов не найден, возвращает None.

translation(domain [, localedir [, languages [, class_]]]) Catalog(domain [, localedir [, languages [, class_]]]) Возвращает объект, реализующий перевод сообщений. Аргументы domain, localedir и languages передаются функции find() для поиска нужного ‘.mo’ файла. Возвращаемый объект является экземпляром класса class_ (по умолча нию используется GNUTranslations). Конструктор класса вызывается с одним аргументом — файловым объектом, реализующим доступ к ‘.mo’-файлу. Если ‘.mo’ файл не найден, генерируется исключение IOError. Функция translation() кэширует созданные объекты и использует их при повторных запросах объекта для того же ‘.mo’-файла.

Имя Catalog() определено для совместимости с версией модуля gettext, кото рую использует GNOME.

install(domain [, localedir [, unicode]]) Эквивалентно вызову ‘translation(domain, localedir).install(unicode)’.

Эта функция предоставляет самый простой способ установить функцию _(), реа лизующую перевод сообщений. Для удобства _() устанавливается в пространство встроенных имен и, таким образом, доступна во всех модулях, используемых приложением.

Ниже описаны классы, непосредственно реализующие перевод строк сообще ний.

NullTranslations([fp]) Этот класс реализует основной интерфейс, и используется в качестве базово го класса для остальных классов-переводчиков. При инициализации устанавлива ет “защищенные” атрибуты _info и _charset созданного экземпляра равными None и, если задан и не равен None аргумент fp, вызывает метод _parse(fp), который должен быть переопределен в производных классах.

Экземпляры NullTranslations имеют следующие методы:

_parse(fp) Ничего не делает в базовом классе. В производных классах этот метод должен считывать данные из файла, представленного файловым объектом fp, и инициали зировать каталог сообщений экземпляра.

17.2. gettext — выдача сообщений на родном языке gettext(message) В базовом классе возвращает сообщение message без изменений. В производных классах должен возвращать перевод сообщения.

ugettext(message) В базовом классе возвращает сообщение message в виде строки Unicode. В про изводных классах должен возвращать перевод сообщения в виде строки Unicode.

info() Возвращает значение “защищенного” атрибута _info (метаданные каталога в виде словаря).

charset() Возвращает значение “защищенного” атрибута _charset (кодировка перевода со общений в каталоге).

install([unicode]) Если аргумент unicode опущен или является ложью, устанавливает собственный метод gettext() в пространство встроенных имен под именем _(), в противном случае устанавливает собственный метод ugettext().

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

def gettext(message): return message import builtin if hasattr(builtin, ’ps1’):

# _ = gettext elif not hasattr(builtin, ’_’):

builtin._ = gettext Это также позволит обеспечить корректную работу (без перевода сообщений) при импортировании модуля в интерактивном режиме.

Модуль gettext также определяет класс GNUTranslations, производный от NullTranslations. Этот класс переопределяет метод _parse(), обеспечивая чтение ‘.mo’-файлов в формате GNU gettext (как big-endian, так и little-endian). Он также ана лизирует метаданные каталога и сохраняет их в “защищенном” атрибуте экземпляра _info. Если каталог содержит запись с ключом ’Content-Type’, то указанная в ней кодировка сохраняется в “защищенном” атрибуте _charset.

Если ‘.mo’ оказывается поврежденным, при инициализации экземпляра GNUTranslations будет сгенерировано исключение IOError.

244 Глава 17. Средства интернационализации Класс GNUTranslations также переопределяет методы gettext() и ugettext(). Последний передает атрибут _charset встроенной функции unicode() для получения строки Unicode.

ОС Solaris определяет собственный формат ‘.mo’-файлов, который в настоящее время не поддерживается.

17.2.3 Изготовление каталога переведенных сообщений Для того, чтобы подготовить код на языке Python к интернационализации, необходимо взглянуть на строки в Вашем файле. Все строки, подлежащие переводу, должны быть записаны литерально и использоваться в качестве аргумента функции _(). Например:

filename = ’mylog.txt’ message = _(’writing a log message’) fp = open(filename, ’w’) fp.write(message) fp.close() Здесь строка ’writing a log message’ помечена как подлежащая переводу, в то время как ’mylog.txt’ и ’w’ — нет.

В стандартную поставку Python включена утилита pygettext, которая извлекает строки, подлежащие переводу, из файла с исходным кодом и помещает их в ‘.pot’-файл4.

Именно с этим файлом работает человек, выполняющий перевод. С помощью утилит пакета GNU gettext Вы можете изготовить ‘.mo’-файл, который читается экземплярами класса GNUTranslations.

Аналогичную работу выполняет программа xpot, доступная в пакете po-utils по адресу http://www.iro.umontreal.ca/contrib/po-utils/HTML.

Глава Математический аппарат Модули, описанные в этой главе, позволяют выполнять основные математические операции. Если Вас интересуют многомерные массивы и функции линейной алге бры, взгляните на пакет модулей “Numerical Python” (NumPy), доступный по адресу http://numpy.sourceforge.net/.

math Математические функции для работы с вещественными числами.

cmath Математические функции для работы с комплексными числами.

random Генерация псевдослучайных чисел с различными распределениями.

whrandom Генератор псевдослучайных чисел.

bisect Поддержание последовательностей в сортированном состоянии. Реализу ет алгоритм поиска путем деления пополам.

array Эффективные массивы чисел одинакового типа.

18.1 math — математические функции для работы с веще ственными числами Модуль math всегда доступен и предоставляет доступ к стандартным математическим функциям. Эти функции не работают с комплексными числами — для этого следует использовать одноименные функции из модуля cmath.

acos(x) Возвращает арккосинус x.

asin(x) Возвращает арксинус x.

atan(x) Возвращает арктангенс x.

atan2(x, y) Эквивалентно atan(x/y). Аргумент y может быть равен 0 — в этом случае возвращает pi/2.

246 Глава 18. Математический аппарат ceil(x) Возвращает наименьшее вещественное число с нулевой дробной частью большее, чем x.

cos(x) Возвращает косинус x.

cosh(x) Возвращает гиперболический косинус x.

exp(x) Возвращает e**x.

fabs(x) Возвращает абсолютное значение x.

floor(x) Возвращает наибольшее вещественное число с нулевой дробной частью меньшее, чем x.

fmod(x, y) Результат этой функции зависит от реализации одноименной функции библиотеки языка C. Обычно дает такой же результат, как x % y.

frexp(x) Возвращает пару ‘(m, e)’, где m — мантисса (вещественное число) и e — экс поненциальная часть (целое число). Для чисел m и e всегда выполняется условие ‘x == m * 2**e’. Если аргумент x равен нулю, возвращает ‘(0.0, 0)’. В про тивном случае всегда выполняется ‘0.5 <= abs(m) < 1’.

hypot(x, y) Возвращает евклидово кодовое расстояние, ‘sqrt(x*x + y*y)’.

ldexp(m, e) Функция, обратная frexp(). Возвращает ‘m * (2**e)’.

log(x) Возвращает натуральный логарифм x.

log10(x) Возвращает десятичный логарифм x.

modf(x) Возвращает кортеж из пары вещественных чисел — дробной и целой части x. Оба возвращаемых числа имеют такой же знак, как у числа x.

pow(x, y) Возвращает x**y.

sin(x) Возвращает синус x.

18.2. cmath — математические функции для работы с... sinh(x) Возвращает гиперболический синус x.

sqrt(x) Возвращает квадратный корень из x.

tan(x) Возвращает тангенс x.

tanh(x) Возвращает гиперболический тангенс x.

Обратите внимание, что функции frexp() и modf() имеют другой интерфейс, нежели их эквиваленты в языке C: они возвращают пару значений вместо того, чтобы возвращать второе значение через аргумент.

Модуль также определяет две константы:

pi Число.

e Число e.

18.2 cmath — математические функции для работы с ком плексными числами Модуль cmath всегда доступен и предоставляет доступ к математическим функциям, работающими с комплексными числами.

acos(x) Возвращает арккосинус x.

acosh(x) Возвращает гиперболический арккосинус x.

asin(x) Возвращает арксинус x.

asinh(x) Возвращает гиперболический арксинус x.

atan(x) Возвращает арктангенс x.

248 Глава 18. Математический аппарат atanh(x) Возвращает гиперболический арктангенс x.

cos(x) Возвращает косинус x.

cosh(x) Возвращает гиперболический косинус x.

exp(x) Возвращает e**x.

log(x) Возвращает натуральный логарифм x.

log10(x) Возвращает десятичный логарифм x.

sin(x) Возвращает синус x.

sinh(x) Возвращает гиперболический синус x.

sqrt(x) Возвращает квадратный корень из x.

tan(x) Возвращает тангенс x.

tanh(x) Возвращает гиперболический тангенс x.

Обратите внимание, что функции frexp() и modf() имеют другой интерфейс, нежели их эквиваленты в языке C: они возвращают пару значений вместо того, чтобы возвращать второе значение через аргумент.

Модуль также определяет две константы:

pi Число (вещественное).

e Число e (вещественное).

Заметим, что эти функции похожи, но не идентичны одноименным функциям в мо дуле math. Различия проявляются даже при использовании вещественных аргументов.

Например, math.sqrt(-1) генерирует исключение, в то время как cmath.sqrt(-1) возвращает 1j. Кроме того, функции модуля cmath всегда возвращают комплексное число, даже если оно может быть выражено в рамках вещественного (в этом случае число имеет нулевую мнимую часть).

18.3. random — псевдослучайные числа с различными... 18.3 random — псевдослучайные числа с различными рас пределениями Этот модуль определяет функции, генерирующие псевдослучайные числа с различными распространенными распределениями. Все они используют генератор псевдослучайных чисел с равномерным распределением, предоставляемый модулем whrandom. Аргументы описанных здесь функций имеют имена в соответствии с общепринятой в математике практикой обозначения параметров уравнений распределений.

betavariate(alpha, beta) Бета-распределение. Оба аргумента должны быть больше -1, возвращает значение между 0 и 1.

cunifvariate(mean, arc) Циклическое равномерное распределение. mean — средний угол, arc — ширина диапазона. Оба аргумента должны быть в диапазоне от 0 до. Возвращаемое значение находятся в диапазоне от mean - arc/2 до mean + arc/2 (также приводится к диапазону от 0 до ).

expovariate(lambda) Экспоненциальное распределение. Аргумент lambda равен единице, деленной на желаемое математическое ожидание распределения. Возвращает значения от 0 до +.

gamma(alpha, beta) Гамма-распределение. Аргументы должны удовлетворять условиям alpha > -1 и beta > 0.

gauss(mu, sigma) normalvariate(mu, sigma) Нормальное распределение (Гаусса). mu — математическое ожидание и sigma — стандартное отклонение. Функция gauss() имеет немного более быструю реали зацию.

lognormvariate(mu, sigma) Логарифмически нормальное распределение. Натуральный логарифм от значений, возвращаемых этой функцией, дает нормальное распределение с математическим ожидание mu и стандартным отклонением sigma. mu может иметь любое значения, sigma должен быть больше нуля.

vonmisesvariate(mu, kappa) Распределение фон Мизеса. mu — математическое ожидание, выраженное в радиа нах от 0 до 2, kappa — коэффициент кучности, который должен быть больше или равен нулю. Если аргумент kappa равен нулю, это распределение вырождается в равномерное распределение в диапазоне от 0 до 2.

paretovariate(alpha) Распределение Парето. alpha — параметр формы распределения.

250 Глава 18. Математический аппарат weibullvariate(alpha, beta) Распределение Вейбулла. alpha — масштабный коэффициент, beta — параметр формы распределения.

Для удобства модуль random также экспортирует имена random(), uniform(), randrange(), randint() и choice() из модуля whrandom и переопределяет seed():

seed([obj]) Инициализирует генератор случайных чисел хэш-значением объекта obj. Если аргумент obj опущен или равен None, использует для инициализации текущее время (аналогично whrandom.seed()).

18.4 whrandom — генератор псевдослучайных чисел Этот модуль определяет класс whrandom, реализующий генератор псевдослучайных чи сел Вичмана-Хилла1:

whrandom([x, y, z]) Создает, инициализирует, вызывая метод seed(), и возвращает объект-генератор.

Экземпляры класса whrandom имеют следующие методы:

seed([x, y, z]) Инициализирует генератор целыми числами x, y и z. Числа должны быть в диа пазоне от 0 до 255 (включительно). Если аргументы опущены или равны нулю, используются значения, производные от текущего времени. Если один или два аргумента равны нулю, нулевые значения заменяются единицей.

random() Возвращает случайное вещественное число r такое, что 0.0 <= r < 1.0.

uniform(a, b) Возвращает случайное вещественное число r такое, что a <= r < b.

randrange([start,] stop [, step]) Возвращает случайное целое число из ‘range(start, stop, step)’.

randint(a, b) Возвращает случайное целое число из ‘range(a, b +1)’. Этот метод остав лен лишь для совместимости со старыми версиями модуля — используйте randrange().

Wichmann, B. A. and Hill, I. D., “Algorithm AS 183: An efficient and portable pseudo-random number generator”, URL 31 (1982) 188–190.

18.5. bisect — поддержание последовательностей в... choice(seq) Выбирает случайный элемент из непустой последовательности seq и возвращает его.

При импортировании модуль whrandom создает экземпляр класса whrandom и делает его методы seed(), random(), uniform(), randrange(), randint() и choice() доступными в глобальном пространстве имен модуля. Заметим, что использо вание отдельных экземпляров класса whrandom приведет к использованию независимых последовательностей псевдослучайных чисел.

Методы экземпляров whrandom дают случайные числа с равномерным распреде лением. Если Вам необходимо получить случайные числа с другими распределениями, воспользуйтесь функциями, определенными в модуле random.

18.5 bisect — поддержание последовательностей в сорти рованном состоянии Этот модуль предоставляет возможность поддерживать последовательности в сортиро ванном состоянии без необходимости в сортировке после каждого добавления элемента, что особенно важно для больших списков, сравнение элементов которого является до рогой операцией. Для выполнение этой задачи модуль реализует алгоритм поиска путем деления пополам.

Модуль bisect предоставляет следующие функции:

bisect(list, item [, lo [, hi]]) Находит место в списке (индекс), в которое необходимо вставить item, для того, чтобы сохранить список в сортированном состоянии. Аргументы lo и hi могут быть использованы для указания подмножества списка, которое следует принимать в рассмотрение. Возвращаемое значения подходит для использования в качестве первого аргумента метода list.insert().

insort(list, item [, lo [, hi]]) Вставляет item в список list, сохраняя сортированное состояние списка. Экви валентно ‘list.insert(bisect.bisect(list, item, lo, hi), item)’.

Функция bisect() может быть полезна для распределения данных по категориям.

В следующем примере эта функция используется для определения оценки (обозначаемой буквой, как это принято во многих западных странах) за экзамен по общему количеству набранных баллов. Пусть 85 и более баллов соответствует оценке ‘A’, 75–84 — ‘B’ и т. д.:

>>> grades = "FEDCBA" >>> breakpoints = [30, 44, 66, 75, 85] 252 Глава 18. Математический аппарат >>> from bisect import bisect >>> def grade(total):

... return grades[bisect(breakpoints, total)]...

>>> grade(66) ’C’ >>> map(grade, [33, 99, 77, 44, 12, 88]) [’E’, ’A’, ’B’, ’D’, ’F’, ’A’] 18.6 array — эффективные массивы чисел Этот модуль определяет новый тип объектов array, эффективно реализующий массивы значений основных типов: символов, целых и вещественных чисел. Массивы ведут себя аналогично спискам с одним исключением: все сохраняемые в массиве объекты должны быть одного определенного типа. Тип элементов определяется при создании массива одним из следующих символов, идентифицирующих тип:

Символ Тип языка C Минимальный размер в байтах ’c’ char (символ) ’b’ signed char (знаковое целое) ’B’ unsigned char (беззнаковое целое) ’h’ signed short (знаковое целое) ’H’ unsigned short (беззнаковое целое) ’i’ signed int (знаковое целое) ’I’ unsigned int (беззнаковое целое) ’l’ signed long (знаковое целое) ’L’ unsigned long (беззнаковое целое) ’f’ float (вещественное число) ’d’ double (вещественное число) Реальное представление значений зависит от архитектуры машины. Используе мый размер доступен через атрибут itemsize массивов. При извлечении элементов из массивов, при конструировании которых использовался символ ’L’ или ’I’, значение представляется типом long int языка Python, так как в рамках типа int не может быть представлен весь диапазон чисел типов unsigned int и unsigned long.

array(typecode [, initializer]) Создает новый объект-массив, тип элементов которого определяется символом typecode, инициализирует элементами последовательности initializer (дол жен быть списком или обычной строкой;

initializer передается методу fromlist() или fromstring()) и возвращает его.

18.6. array — эффективные массивы чисел ArrayType Объект типа, соответствующий объектам, которые возвращает функция array().

Массивы имеют следующие атрибуты данных и методы:

typecode Символ, определяющий тип элементов массива.

itemsize Размер в байтах внутреннего представления одного элемента массива.

append(x) Добавляет x в конец массива.

buffer_info() Возвращает кортеж с адресом и длиной в байтах буфера, используемого для хра нения содержимого массива. Возвращаемые значения действительны до тех пор, пока массив существует и к нему не применяются операции, изменяющие длину.

byteswap() Изменяет порядок следования байтов для всех элементов массива. Эта операция может быть выполнена только для значений, внутреннее представление которых имеет размер 1, 2, 4 или 8 байт. Метод может быть полезен при чтении данных из файла, который был записан на машине с другим порядком следования байтов.

count(x) Возвращает число элементов массива равных x.

extend(a) Добавляет элементы массива a в конец массива.

fromfile(f, n) read(f, n) Считывает и добавляет в конец массива n элементов (машинное представление) из файла, представленного файловым объектом (встроенного типа file) f. Если файл содержит меньше элементов, чем n, генерируется исключение EOFError, но все прочитанные к этому времени элементы добавляются в массив.

Имя read() присутствует для совместимости со старыми версиями.

fromlist(list) Добавляет в конец массива элементы из списка list. Это эквивалентно инструк ции ‘for x in list: a.append(x)’ с одним исключением: если список содер жит элементы неверного типа, массив остается без изменений.

fromstring(s) Добавляет в конец массива элементы из строки s, интерпретируя строку как ма шинное представление значений (то есть аналогично тому, как это делает метод fromfile()). Число символов в строке должно быть кратным размеру элементов массива.

254 Глава 18. Математический аппарат index(x) Возвращает индекс первого элемента массива равного x. Если массив не содержит таких значений, генерируется исключение ValueError.

insert(i, x) Вставляет значение x в массив перед элементом с индексом i.

pop([i]) Удаляет из массива элемент с индексом i и возвращает его. Использование от рицательных индексов позволяет вести отсчет с конца. По умолчанию аргумент i равен -1, то есть соответствует последнему элементу.

remove(x) Удаляет из массива первый элемент равный x.

reverse() Меняет порядок следования элементов массива на обратный.

tofile(f) write() Записывает все элементы массива (машинное представление) в файл, представ ленный файловым объектом f. Имя write() присутствует для совместимости со старыми версиями.

tolist() Возвращает список элементов массива.

tostring() Возвращает строку с машинным представлением элементов массива (та же самая последовательность байтов, которая записывается в файл методом tofile()).

Глава Интерфейсные классы к встроенным типам Модули, описанные в этой главе, позволяют определять новые классы, наследующие возможности встроенных типов.

UserString Интерфейсный класс для создания строковых объектов.

UserList Интерфейсный класс для создания последовательностей.

UserDict Интерфейсный класс для создания отображений.

19.1 UserString — интерфейсный класс для создания строковых объектов Этот модуль определяет интерфейсный класс, предназначенный для использования в качестве базового класса при определении классов, ведущих себя аналогично строкам.

Вы можете переопределять существующие методы и добавлять новые, таким образом изменяя поведение или добавляя новые возможности.

UserString([initialdata]) Возвращает экземпляр класса, который ведет себя аналогично объектам встро енного типа string (обычная строка) или unicode (строка Unicode). Экзем пляр инициализируется из initialdata (объект произвольного типа). Если initialdata не является строкой (string или unicode), экземпляр инициа лизируется строковым представлением объекта (str(initialdata)). Если аргу мент initialdata опущен, экземпляр инициализируется пустой строкой. Данные из initialdata сохраняются в виде строки в атрибуте data созданного экзем пляра.

В дополнение к методам и операциям, характерным для строк (см. раздел 11.2.1), экземпляры класса UserString имеют следующий атрибут:

data Строка (string или unicode), в которой хранятся данные.

256 Глава 19. Интерфейсные классы к встроенным типам В качестве примера класса, производного от UserString модуль определяет еще один класс:

MutableString([initialdata]) Возвращает экземпляр класса, представляющий изменяемую строку. Изменяемые строки не могут быть использованы в качестве ключей в словарях: вычисление хэш-значения изменяемых объектов, для которых определена операция срав нения иначе, чем простое сравнение идентификаторов, бессмысленно и может привести к ошибкам, которые трудно обнаружить. Класс MutableString определен здесь в основном для того, чтобы пользователь не определил анало гичный собственный класс, забыв при этом переопределить специальный метод hash().

Помимо унаследованных от UserString, экземпляры класса MutableString поддерживают операции, позволяющие изменить объект: изменение и удаление символа (элемента последовательности) и подстроки (среза последовательности) — часть опера ций, характерных для изменяемых последовательностей (см. раздел 11.2.6).

19.2 UserList — интерфейсный класс для создания по следовательностей Этот модуль определяет интерфейсный класс, предназначенный для использования в качестве базового класса при определении последовательностей. Вы можете переопре делять существующие методы и добавлять новые, таким образом изменяя поведение или добавляя новые возможности.

Модуль определяет единственное имя — класс UserList:

UserList([initialdata]) Возвращает экземпляр класса, который ведет себя аналогично объектам встро енного типа list (список). Экземпляр инициализируется данными, взяты ми из initialdata (последовательность произвольного типа). Если аргумент initialdata опущен, экземпляр изначально не содержит элементов. Данные из initialdata копируются и сохраняются в виде списка в атрибуте data создан ного экземпляра.

В дополнение к методам и операциям, характерным для всех изменяемых после довательностей (см. раздел 11.2.6), экземпляры класса UserList имеют следующий атрибут:

data Список, в котором хранятся данные.

19.3. UserDict — интерфейсный класс для создания отображений 19.3 UserDict — интерфейсный класс для создания отоб ражений Этот модуль определяет интерфейсный класс, предназначенный для использования в качестве базового класса при определении отображений. Вы можете переопределять су ществующие методы и добавлять новые, таким образом изменяя поведение или добавляя новые возможности.

Модуль определяет единственное имя — класс UserDict:

UserDict([initialdata]) Возвращает экземпляр класса, который ведет себя аналогично объектам встро енного типа dictionary (словарь). Экземпляр инициализируется данными, взятыми из initialdata (отображение произвольного типа). Если аргумент initialdata опущен, экземпляр изначально не содержит записей. Данные из initialdata копируются и сохраняются в виде словаря в атрибуте data создан ного экземпляра.

В дополнение к методам и операциям, характерным для всех отображений (см.

раздел 11.3), экземпляры класса UserDict имеют следующий атрибут:

data Словарь, в котором хранятся данные.

Глава Сохранение и копирование объектов Модули, описанные в этой главе, предоставляют возможность сохранения и копирования объектов языка Python.

pickle Преобразует объекты языка Python в последовательность байтов и обрат но.

cPickle Более быстрый вариант модуля pickle.

shelve Сохранение объектов в базе данных в стиле DBM.

marshal Позволяет получить байт-компилированное представление объектов ко да (и сопутствующих им объектов) и восстановить объекты из их байт компилированного представления.

struct Преобразование объектов в структуры языка C.

20.1 pickle и cPickle — представление объектов в виде последовательности байтов Модуль pickle реализует простой, но мощный алгоритм “консервирования” (pickling, преобразования объектов в последовательность байтов) почти любых объектов языка Python с возможностью дальнейшего восстановления (unpickling). Однако этот модуль не заботится о сохранении имен объектов и не обеспечивает к ним совместный доступ.

Полученную последовательность байтов Вы можете записать в файле, сохранить в базе данных или переслать по сети на другую машину. Модуль shelve предоставляет про стой интерфейс для сохранения “законсервированных” объектов в базе данных в стиле DBM.

В то время как реализованный на языке Python модуль pickle работает доста точно медленно, реализованный на C модуль cPickle работает иногда почти в раз быстрее. Модуль cPickle использует точно такой же алгоритм и имеет анало гичный интерфейс, за исключением того, что вместо классов Pickler и Unpickler используются функции, возвращающие объекты с аналогичным интерфейсом.

Хотя модули pickle и cPickle и используют внутри себя встроенный модуль marshal, они отличаются от этого модуля способом обработки данных:

20.1. pickle и cPickle — представление объектов в виде... • Модули pickle и cPickle отслеживают объекты, которые уже были обрабо таны, и никогда не обрабатывают их повторно. Это позволяет “консервировать” рекурсивные объекты (объекты, содержащие ссылки на себя), которые не могут быть обработаны модулем marshal. Аналогично обрабатываются совместно ис пользуемые объекты (различные объекты ссылаются на один и тот же объект):

они остаются совместно используемыми, что очень важно для изменяемых объек тов.

• Модуль marshal совсем не поддерживает экземпляры классов, в то время как мо дули pickle и cPickle позволяют с ними работать. Определение класса должно находиться в том же модуле, в котором оно было при “консервации” объекта.

Используемый формат данных характерен для языка Python и не имеет огра ничений, характерных, например, для стандартного формата XDR (External Data Representation), который не позволяет представить совместное использование объек тов. Однако это означает, что программы на других языках не смогут восстановить “законсервированный” объект.

По умолчанию для представления используются только печатные ASCII символы, что позволяет просматривать файл с данными с помощью обычного текстового редакто ра с целью отладки или восстановления данных. С другой стороны, такое представление занимает больше места, чем двоичный формат. Вы можете выбрать двоичный формат, ис пользуя ненулевое значение аргумента bin конструктора Pickler и функций dump() и dumps().

Модули pickle и cPickle не поддерживают объекты кода. В этом нет большой необходимости, так как для “консервирования” объектов кода традиционно используется модуль marshal. Кроме того, это позволяет избежать возможного включения в файлы данных троянских коней.

Для удобства работы с долгоживущими модулями предоставляется поддерж ка ссылок на объекты, которые не подлежат “консервированию”. Для таких объ ектов запоминается идентификатор, возвращаемый атрибутом-функцией или методом persistent_id(). Идентификатор может быть произвольной строкой из печатных ASCII символов. Для восстановления объекта по идентификатору необходимо опреде лить атрибут-функцию persistent_load().

На “консервирование” экземпляров классов есть несколько ограничений. Во первых, класс должен быть определен в глобальном пространстве имен одного из модулей. Во-вторых, все переменные экземпляра (то есть атрибут dict) долж ны поддерживать “консервацию” или же экземпляр класса должен иметь метод getstate() протокола копирования, возвращающий объект, который поддержи вает “консервацию”.

При восстановлении экземпляра класса его метод init() обычно не вызыва ется. Для того, чтобы он вызывался, класс должен иметь метод getinitargs() протокола копирования. Другие методы протокола копирования (см. раздел ??) getstate() и setstate() используются для сохранения и восстановле ния состояния объекта.

260 Глава 20. Сохранение и копирование объектов Обратите внимание, что при “консервации” экземпляра класса сам объект-класс и, соответственно, его атрибуты не сохраняются — сохраняются только атрибуты эк земпляра и запоминается имя класса и модуля, в котором класс определен. Поэтому класс должен быть определен в глобальном пространстве имен модуля, который, од нако, в момент восстановления может быть и не импортирован. Это сделано с целью иметь возможность исправить ошибки в определении класса или добавить новые методы и загрузить объект, созданный со старой версией класса. Если Вы собираетесь работать с долгоживущими объектами, которые переживут множество версий класса, разумно сохранить номер версии класса, чтобы затем необходимые преобразования могли быть выполнены методом setstate().

Модули pickle и cPickle определяют следующие конструкторы:

Pickler(file [, bin]) Класс (в модуле pickle) или функция (в модуле cPickle), возвращает объект, реализующий “консервирование”. Аргумент file должен быть файловым объек том, имеющим метод write(). Если задан отличный от нуля аргумент bin (целое число), используется более компактный двоичный формат.

Unpickler(file) Класс (в модуле pickle) или функция (в модуле cPickle), возвращает объект, реализующий восстановление “законсервированного” объекта. Аргумент file дол жен быть файловым объектом, имеющим методы read() и readline().

Объекты, возвращаемые конструктором Pickler(), имеют следующие (основные) методы:

dump(object) “Консервирует” объект object.

persistent_id(object) Этот метод (функция или любой другой объект, поддерживающий вызов) вызывает ся для каждого из вложенных объектов. Должен возвращать строку-идентификатор постоянного объекта или None, если объект подлежит консервации. Изначально метод persistent_id() не определен (cPickle) или всегда возвращает None (pickle).

Объекты, возвращаемые конструктором Unpickler(), имеют методы, предназна ченные для выполнения обратных действий:

load() Восстанавливает и возвращает ранее “законсервированный” объект.

noload() (только в модуле cPickle) Проходит весь цикл восстановления объекта, но сам объект не создает. Может быть полезен для тестирования persistent_load 20.1. pickle и cPickle — представление объектов в виде... persistent_load(id_string) Этот метод (функция или любой другой объект, поддерживающий вызов) вызывается для восстановления ссылки на постоянный объект по строке идентификатору id_string, которая при “консервации” была возвращена мето дом persistent_id(). Изначально метод persistent_load() не определен.

Вы можете несколько раз вызывать метод dump() объекта Pickler. Для вос становления всех “законсервированных” объектов необходимо будет столько же раз вызвать метод load() соответствующего объекта Unpickler(). Если один и тот же объект “консервируется” несколько раз методом dump() одного и того же объекта Pickler, метод load() восстановит ссылки на один и тот же объект. Предполагается, что “консервация” нескольких объектов производится без внесения в них изменений в промежутке между вызовами метода load(). Если Вы измените объект и затем по вторно “законсервируете” его с помощью того же объекта Pickler, объект не будет “законсервирован” — сохранится лишь ссылка на старое значение.

Кроме конструкторов Pickler() и Unpickler(), модули определяют следующие функции и объекты данных:

dump(object, file [, bin]) “Консервирует” объект object в файл file. Эквивалентно вызову ‘Pickler(file, bin).dump(object)’.

load(file) Восстанавливает “законсервированный” объект из файла file и возвращает его.

dumps(object [, bin]) Возвращает “законсервированное” представление объекта в виде строки вместо того, чтобы записывать его в файл.

loads(string) Восстанавливает “законсервированный” объект из строки string и возвращает его.

format_version Строка-версия формата, используемого при “консервации”.

compatible_formats Список старых версий (строк) формата данных, которые, помимо текущей версии (format_version), могут быть восстановлены.

Ниже приведена иерархия исключений, которые используются модулями pickle и cPickle при возникновении ошибок (до версии 2.0 исключения определены в виде строк, что сильно затрудняет их обработку):

PickleError Базовый класс для всех исключений, является производным от стандартного класса исключений Exception.

262 Глава 20. Сохранение и копирование объектов PicklingError Класс исключений, которые генерируются при попытке “законсервировать” объект, который не может быть “законсервирован”.

UnpicklingError Класс исключений, которые генерируются при восстановлении объекта, если его конструктор не зарегистрирован (см. описание модуля copy_reg).

Ниже приведен список объектов, которые могут быть “законсервированы”:

• None;

• Целые, длинные целые и вещественные числа.

• Простые строки и строки Unicode.

• Кортежи, списки и словари, содержащие только объекты, которые могут быть “за консервированы”.

• Классы и функции, определенные в глобальном пространств имен модуля (на самом деле запоминаются только имена модуля и функции).

• Экземпляры классов, атрибут dict которых может быть “законсервирован”.

• Экземпляры классов, имеющих соответствующие методы протокола копирования (см. раздел ??).

• Объекты, поддержка которых зарегистрирована с помощью модуля copy_reg.

Именно таким образом осуществляется поддержка комплексных чисел.

20.2 shelve — сохранение объектов в базе данных в стиле DBM С помощью этого модуля Вы можете создать “стеллаж” (shelf) — объект с интерфейсом словаря, который позволяет сохранять в базе данных в стиле DBM объекты в “законсер вированном” виде. Для консервации используется модуль cPickle или pickle, если первый недоступен.

open(filename [, flag]) Открывает файл filename с базой данных в стиле DBM и на его основе создает и возвращает объект-стеллаж. Флаг flag используется в качестве второго аргумента в функции anydbm.open() (см. описание модуля anydbm).

Объекты-стеллажи поддерживают большинство операций, характерных для отобра жений (см. раздел 11.3): доступ к объектам по ключу, добавление и удаление записей, 20.3. marshal — байт-компилированное представление объектов методы has_key(), keys(), get(). В качестве ключа могут использоваться только обычные строки. Методы sync() и close() вызывают соответствующие методы объ екта, представляющего базу данных.

Модуль shelve не поддерживает одновременного доступа, если при этом произ водится запись в базу данных. Одновременный доступ на чтение в принципе безопасен.

20.3 marshal — байт-компилированное представление объектов Этот модуль позволяет получить байт-компилированное представление объектов кода (code), а также сопутствующих им объектов: None;

объектов, которые могут быть представлены литеральными выражениями (любые числа и строки);

кортежей, спис ков и словарей, содержащих только объекты, для которых может быть получено байт компилированное представление. Попытка получить байт-компилированное представле ние для рекурсивных объектов (содержащих ссылки на самих себя) приведет к заци кливанию. Формат байт-компилированного кода специфичен для языка Python, но не зависит от платформы. marshal не является модулем общего назначения. Для сохра нения и передачи объектов следует использовать модули pickle, cPickle и shelve.

Модуль определяет следующие функции:

dump(object, file) Записывает байт-компилированное представление объекта object в файл. Аргу мент file должен быть объектом типа file, открытым для записи в двоичном режиме (’wb’ или ’w+b’). Если для объекта object не может быть получе но байт-компилированное представление, генерируется исключение ValueError, но при этом в файл будет записан “мусор”, который не будет корректно считан функцией load().

load(file) Считывает байт-компилированное представление для одного объекта из файла, вос станавливает его и возвращает. Если данные в файле не могут быть корректно об работаны, в зависимости от ситуации генерируется одно из исключений EOFError, ValueError или TypeError. Аргумент file должен быть объектом типа file, открытым для чтения в двоичном режиме (’rb’ или ’r+b’).

dumps(object) Возвращает строку с байт-компилированным представлением объекта object.

loads(string) Восстанавливает объект из байт-компилированного представления string. Лиш ние символы в строке игнорируются.

264 Глава 20. Сохранение и копирование объектов 20.4 struct — преобразование объектов в структуры язы ка C Этот модуль позволяет преобразовывать значения некоторых объектов в структуры язы ка C в виде строк и обратно. Данные в строке располагаются в соответствии со строкой формата. Эти возможности могут быть использованы для чтения и сохранения двоичных данных, пересылки данных через сетевое соединение.

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

pack(format, value1...) Возвращает строку, содержащую значения value1..., упакованные в соответ ствии с форматом. Количество и тип аргументов должны соответствовать значени ям, которые требует строка формата format.

unpack(format, string) Распаковывает строку string в соответствии с форматом format и возвра щает кортеж объектов. Строка должна содержать ровно такое количество дан ных, которое требует строка формата, то есть длина строки должна быть равной calcsize(format).

calcsize(format) Возвращает размер структуры (то есть длину строки), соответствующей формату format.

Символы строки формата имеют следующее значение:

Символ Тип языка C Тип объекта в языке Python x — (пустой байт) — (пустой байт) c char символ (строка длиной 1) b signed char int B unsigned char int h short int H unsigned short int i int int I unsigned int long int (int, если в языке C тип int меньше, чем long) l long int L unsigned long long int f float float d double float s char[] string p char[] string P void * int 20.4. struct — преобразование объектов в структуры языка C Перед символом формата может идти число, обозначающее количество повторений.

Например, строка формата ’4h’ полностью эквивалентна строке ’hhhh’. Символы пропуска между символами формата игнорируются, однако символы пропуска между числом и символом формата не допускаются.

Число перед символом формата ‘s’ интерпретируется как длина строки, а не число повторений. То есть ’10s’ обозначает строку из 10 символов, в то время как ’10c’ — 10 раз по одному символу. При упаковке строки урезаются или дополняются до нужной длины символами с кодом 0. При распаковке строки имеют указанную в строке формата длину.

Символ формата ‘p’ может быть использован для упаковки строк в стиле языка Pascal. В этом случае первый байт является длиной строки, затем следует сама стро ка. Число перед символом ‘p’ указывает на длину строки вместе с байтом, в котором сохранится длина строки.

По умолчанию для представления используется “родной” для данной платформы формат и порядок следования байтов. Поместив в начало строки формата один из опи санных ниже символов, Вы можете определить порядок следования байтов, размер и выравнивание структур.

Символ Порядок следования байтов Размер и выравнивание @ родной родные = родной стандартные < little-endian стандартные > big-endian стандартные ! общепринятый в сети (= big-endian) стандартные Символ формата ‘P’ может быть использован только с “родным” порядком следо вания байтов.

Для того, чтобы выравнять конец структуры в соответствии с определенным типом, можно поместить в конец строки формата символ, определяющий этот тип с числом по вторения равным 0. Например, формат ’llh0l’ определяет дополнительные два байта в конце (подразумевая, что тип long выравнивается в рамках четырех байтов). Этот способ работает только с “родными” размером и выравниванием.

Приведем небольшой пример использования модуля struct (платформа Intel, little-endian):

>>> from struct import * >>> pack(’hhl’, 1, 2, 3) ’\001\000\002\000\003\000\000\000’ >>> unpack(’hhl’, ’\001\000\002\000\003\000\000\000’) (1, 2, 3) >>> calcsize(’hhl’) Глава Доступ к средствам, предоставляемым операционной системой Модули, описанные в этой главе, предоставляют общий интерфейс к службам, доступ ным во всех (или почти всех) операционных системах.

os Основные службы операционной системы.

os.path Работа с именами путей.

stat Средства для интерпретации значений, возвращаемых функциями os.stat(), os.lstat() и os.fstat().

statvfs Константы, предназначенные для интерпретации значений, возвращае мых функцией os.statvfs().

filecmp Сравнение файлов и каталогов.

popen2 Доступ к потокам ввода/вывода дочерних процессов.

time Определение и обработка времени.

sched Планировщик задач общего назначения.

getpass Переносимый способ запросить пароль и определить имя пользователя.

getopt Обработка опций в командной строке.

tempfile Создание временных файлов.

errno Символические имена стандартных системных ошибок.

glob Раскрытие шаблона имен путей в стиле UNIX shell.

fnmatch Сопоставление имен файлов с шаблоном в стиле UNIX shell.

shutil Операции над файлами высокого уровня.

signal Обработка асинхронных событий.

socket Сетевой интерфейс низкого уровня.

select Асинхронные операции ввода/вывода с участием нескольких файловых дескрипторов.

mmap Отображение файлов в память.

21.1. os — основные службы операционной системы 21.1 os — основные службы операционной системы Модуль os позволяет переносимо использовать основные службы операционной систе мы (ОС). Этот модуль производит поиск встроенного модуля, характерного для данной ОС (posix, nt, mac и др.) и экспортирует определенные в нем функции и объекты данных. Модуль спроектирован таким образом, чтобы обеспечить одинаковый интер фейс в тех случаях, когда для разных ОС доступны одинаковые возможности. Функции, определенные только для некоторых ОС также доступны через модуль os, однако их использование не переносимо.

error Является ссылкой на встроенный класс исключений OSError (см. раздел 13).

name Имя зависящего от ОС модуля. В настоящее время могут быть использованы сле дующие имена: ’posix’, ’nt’, ’dos’, ’mac’, ’os2’, ’ce’, ’java’.

path Ссылка на зависящий от операционной системы модуль для работы с именами файлов и путями, например, posixpath или macpath. Этот модуль может быть импортирован напрямую как os.path.

strerror(code) (UNIX, Windows) Возвращает строку с сообщением о системной ошибке, соответствующим коду code.

21.1.1 Параметры процесса Функции и объекты данных, описанные в этом разделе, предоставляют информацию и средства управления для текущего процесса.

environ Отображение имен переменных окружения к их значениям. Например, environ[’HOME’] дает значение переменной окружения HOME. Если на исполь зуемой платформе доступна функция putenv(), отображение environ может быть также использовано для изменения значений переменных окружения. Функ ция putenv() автоматически вызывается при внесении изменений в environ.

Если функция putenv() не доступна, Вы можете использовать измененное отоб ражение в качестве аргумента функции, создающей дочерний процесс.

chdir(path) getcwd() Эти функции описаны в разделе 21.1.4.

268 Глава 21. Доступ к средствам, предоставляемым операционной...

ctermid() (UNIX) Возвращает имя файла, соответствующего контролируемому текущим процессом терминалу.

getegid() (UNIX) Возвращает идентификатор эффективной группы пользователей текущего процес са.

geteuid() (UNIX) Возвращает идентификатор эффективного пользователя текущего процесса.

getgid() (UNIX) Возвращает идентификатор группы пользователей текущего процесса.

getgroups() (UNIX) Возвращает список идентификаторов дополнительных групп, ассоциированных с текущим процессом.

getlogin() (UNIX) Возвращает настоящее регистрационное имя пользователя для текущего процесса, даже если существует несколько таких имен для одного и того же идентификатора пользователя.

getpgrp() (UNIX) Возвращает идентификатор группы процессов текущего процесса.

getpid() (UNIX, Windows) Возвращает идентификатор текущего процесса.

getppid() (UNIX) Возвращает идентификатор родительского процесса.

getuid() (UNIX) Возвращает идентификатор пользователя текущего процесса.

putenv(varname, value) (большинство вариантов UNIX, Windows) Устанавливает значение переменной окружения с именем varname равным строке value. Эти изменения отражаются на дочерних процессах.

setegid(egid) (UNIX) Устанавливает идентификатор эффективной группы пользователей текущего про цесса равным egid.

seteuid(euid) (UNIX) Устанавливает идентификатор эффективного пользователя текущего процесса рав ным euid.

setgid(gid) (UNIX) Устанавливает идентификатор группы пользователей текущего процесса равным egid.

21.1. os — основные службы операционной системы setpgrp() (UNIX) Устанавливает идентификатор группы процессов текущего процесса равным иден тификатору процесса (эквивалентно вызову ‘setpgid(0, 0)’).

setpgid(pid, pgrp) (UNIX) Устанавливает идентификатор группы процессов процесса с идентификатором pid равным pgrp. Аргумент pid равный 0 обозначает текущий процесс. Если аргумент pgrp равен 0, в качестве идентификатора группы используется идентификатор процесса.

setreuid(ruid, euid) (UNIX) Устанавливает идентификаторы реального и эффективного пользователей текущего процесса равными ruid и euid соответственно.

setregid(rgid, egid) (UNIX) Устанавливает идентификаторы реальной и эффективной групп пользователей те кущего процесса равными rgid и egid соответственно.

setsid() (UNIX) Создает новые сессию и группу процессов с идентификаторами, равными иденти фикатору текущего процесса.

setuid(uid) (UNIX) Устанавливает идентификатор пользователя текущего процесса равным uid.

umask(mask) (UNIX, Windows) Устанавливает маску прав на доступ к файлам, которые будут созданы текущим процессом.

uname() (некоторые современные варианты UNIX) Возвращает кортеж из пяти строк: имя системы, имя узла, выпуск, версия, тип машины. Некоторые системы обрезают имя узла, поэто му лучше воспользоваться вызовом socket.gethostname() или даже socket.gethostbyaddr(socket.gethostname()) (см. описание модуля socket).

21.1.2 Создание файловых объектов Приведенные ниже функции создают новые файловые объекты.

fdopen(fd [, mode [, bufsize]]) (UNIX, Windows, Macintosh) Возвращает файловый объект, связанный с файловым дескриптором fd. Аргументы mode и bufsize имеют такое же значение, как и соответствующие аргументы встроенной функции open().

270 Глава 21. Доступ к средствам, предоставляемым операционной...

popen(command [, mode [, bufsize]]) (UNIX, Windows) Создает канал (pipe) с командой command и возвращает связанный с ним фай ловый объект. Вы можете читать вывод команды из файлового объекта или за писывать в него входные данные в зависимости от режима mode: ’r’ (чтение, используется по умолчанию) или ’w’ (запись). Аргумент bufsize имеет такое же значение, как и соответствующий аргумент встроенной функции open(). Код завершения выполненной команды (в формате, аналогичном формату результата функции wait()) возвращается методом close() файлового объекта. Однако, если выполнение команды завершилось успешно (код завершения равен 0), метод close() возвращает None.

В предыдущих версиях под Windows эта функция вела себя ненадежно из-за некор ректной работы функции _popen() библиотеки Windows. Начиная с версии 2.0, используется новая реализация.

tmpfile() (UNIX) Создает и возвращает файловый объект для временного файла, открытого в режиме обновления (’w+’). Этот файл будет автоматически удален после уничтожения всех ассоциированных с ним файловых дескрипторов.

Для всех функций вида popen*() аргумент bufsize определяет размер буфера каналов и mode — режим, в котором будут открыты каналы (’t’ — текстовый, исполь зуется по умолчанию, или ’b’ — двоичный). Аналогичные функции доступны в модуле popen2, но элементы возвращаемого кортежа для них располагаются в ином порядке.

popen2(cmd [, bufsize [, mode]]) (UNIX, Windows) Выполняет команду cmd в качестве дочернего процесса и возвращает кортеж из файловых объектов, соответствующих его стандартным потокам ввода и вывода.

Функция доступна, начиная с версии 2.0.

popen3(cmd [, bufsize [, mode]]) (UNIX, Windows) Выполняет команду cmd в качестве дочернего процесса и возвращает кортеж из файловых объектов, соответствующих его стандартным потокам ввода, вывода и ошибок. Функция доступна, начиная с версии 2.0.

popen4(cmd [, bufsize [, mode]]) (UNIX, Windows) Выполняет команду cmd в качестве дочернего процесса и возвращает кортеж из двух файловых объектов: соответствующий его стандартному потоку ввода и объ единенному потоку вывода и ошибок. Функция доступна, начиная с версии 2.0.

21.1.3 Операции с файловыми дескрипторами В этом разделе описаны операции низкого уровня над потоками с использованием фай ловых дескрипторов.

close(fd) (UNIX, Windows, Macintosh) Закрывает файловый дескриптор fd.

21.1. os — основные службы операционной системы dup(fd) (UNIX, Windows, Macintosh) Возвращает дубликат файлового дескриптора fd.

dup2(fd1, fd2) (UNIX, Windows) Копирует файловый дескриптор fd1 в fd2, предварительно закрыв последний, если это необходимо.

fpathconf(fd, name) (UNIX) Возвращает системную информацию, относящуюся к открытому файлу. Аргу мент name должен быть строкой с именем системного значения или целым числом. Известные для данной ОС имена системных значений даны в слова ре pathconf_names. Если имя name не известно, генерируется исключение ValueError. Если имя не поддерживается ОС (даже если оно включено в pathconf_names), генерируется исключение OSError с errno.EINVAL в ка честве номера ошибки.

fstat(fd) (UNIX, Windows) Возвращает информацию о файловом дескрипторе fd в виде, аналогичном тому, в котором возвращает результат функция stat().

fstatvfs(fd) (UNIX) Возвращает информацию о файловой системе, на которой находится файл, ассо циированный с файловым дескриптором fd, в виде, аналогичном тому, в котором возвращает результат функция statvfs().

ftruncate(fd, length) (UNIX) Укорачивает файл, соответствующий дескриптору fd, так, чтобы его длина была не более length байт.

isatty(fd) (UNIX) Возвращает 1, если дескриптор файла fd открыт и связан с tty-подобным устрой ством, иначе возвращает 0.

lseek(fd, offset, whence) (UNIX, Windows, Macintosh) Устанавливает текущую позицию в файле, соответствующего дескриптору fd. Ар гумент whence указывает точку отсчета: 0 — начало файла, 1 — текущая позиция и 2 — конец файла.

open(filename, flags [, mode]) (UNIX, Windows, Macintosh) Открывает файл с именем filename, устанавливает для него различные флаги в соответствии с аргументом flags и права на доступ в соответствии с аргументом mode (по умолчанию 0777) и текущим значением маски (umask). Возвращает де скриптор открытого файла. В качестве флагов могут быть использованы константы, описанные в конце раздела, объединенные оператором ‘|’.

openpty() (некоторые варианты UNIX) Открывает новую пару псевдотерминалов и возвращает пару дескрипторов ‘(master, slave)’ для pty и tty соответственно.

272 Глава 21. Доступ к средствам, предоставляемым операционной...

pipe() (UNIX, Windows) Создает канал и возвращает пару дескрипторов ‘(r, w)’, которые могут исполь зоваться для чтения и записи соответственно.

read(fd, n) (UNIX, Windows, Macintosh) Считывает не более n байт из файла, ассоциированного с дескриптором fd. Воз вращает строку из считанных байтов.

tcgetpgrp(fd) (UNIX) Возвращает идентификатор группы процессов, ассоциированной с терминалом, де скриптор которого использован в качестве аргумента fd.

tcsetpgrp(fd, pg) (UNIX) Устанавливает идентификатор группы процессов, ассоциированной с терминалом, дескриптор которого использован в качестве аргумента fd, равным pg.

ttyname(fd) (UNIX) Возвращает имя терминала, ассоциированного с дескриптором fd. Если fd не является дескриптором устройства tty, генерируется исключение.

write(fd, str) (UNIX, Windows, Macintosh) Записывает строку str в файл, ассоциированный с дескриптором fd. Возвращает количество реально записанных байтов.

В качестве аргумента flags функции open() могут использоваться следующие константы, объединенные оператором ‘|’:

O_RDONLY (UNIX, Windows, Macintosh) O_WRONLY (UNIX, Windows, Macintosh) O_RDWR (UNIX, Windows, Macintosh) Определяют доступ к файлу: только для чтения, только для записи или для чтения и записи.

O_APPEND (UNIX, Windows, Macintosh) Дописывать данные в конец файла.

O_CREAT (UNIX, Windows, Macintosh) Создать файл, если он не существует.

O_EXCL (UNIX, Windows, Macintosh) Открывать файл только, если он не существует.

O_TRUNC (UNIX, Windows, Macintosh) Если файл существует, его содержимое будет удалено.

O_NDELAY (UNIX) O_NONBLOCK (UNIX) Открыть файл без блокировки.

O_DSYNC (UNIX) O_RSYNC (UNIX) O_SYNC (UNIX) Открыть файл для синхронного ввода/вывода.

21.1. os — основные службы операционной системы O_NOCTTY (UNIX) Если файл является устройством tty, он не станет терминалом, контролирующим текущий процесс.

O_BINARY (Windows, Macintosh) O_TEXT (Windows, Macintosh) Открыть файл в двоичном или текстовом режиме.

21.1.4 Файлы и каталоги access(path, mode) (UNIX, Windows) Проверяет доступ текущего процесса к файлу (каталогу) path на чтение, запись и/или выполнение. Аргумент mode должен быть равен F_OK для проверки суще ствования файла или одна или несколько (объединенных оператором ‘|’) констант из R_OK, W_OK и X_OK для проверки доступа. Возвращает 1, если доступ разрешен, иначе возвращает 0.

F_OK Используется в качестве аргумента mode функции access() для проверки нали чия файла.

R_OK Используется в качестве аргумента mode функции access() для проверки досту па к файлу на чтение.

W_OK Используется в качестве аргумента mode функции access() для проверки досту па к файлу на запись.

X_OK Используется в качестве аргумента mode функции access() для проверки досту па к файлу на выполнение.

chdir(path) (UNIX, Windows, Macintosh) Изменяет текущий рабочий каталог на path.

getcwd() (UNIX, Windows, Macintosh) Возвращает строку, представляющую текущий рабочий каталог.

chmod(path, mode) (UNIX, Windows) Изменяет режим доступа к файлу (каталогу) на mode (целое число).

chown(path, uid, gid) (UNIX) Изменяет идентификаторы пользователя и группы пользователей файла (каталога) path на uid и gid соответственно.

link(src, dst) (UNIX) Создает жесткую ссылку с именем dst, указывающую на src.

274 Глава 21. Доступ к средствам, предоставляемым операционной...

listdir(path) (UNIX, Windows, Macintosh) Возвращает список имен файлов и каталогов в каталоге path (используются пути относительно каталога path). Список не включает специальные имена (curdir и pardir), даже если они присутствуют.

lstat(path) (UNIX) Работает аналогично функции stat(), но не следует символическим ссылкам.

mkfifo(path [, mode]) (UNIX) Создает канал (FIFO) с именем path и режимом доступа mode (целое число, по умолчанию равен 0666) с учетом текущего значения маски доступа (umask).

С именованными каналами работают как с обычными файлами. Созданный канал существует до тех пор, пока он не будет удален, например, с помощью функции unlink(). Обычно сервер открывает именованный канал для чтения и клиент — для записи.

mkdir(path [, mode]) (UNIX, Windows, Macintosh) Создает каталог с именем path и режимом доступа mode (целое число, по умол чанию используется 0777) с учетом маски доступа (umask).

makedirs(path [, mode]) Функция для рекурсивного создания каталогов. Работает аналогично функции mkdir(), но автоматически создает все необходимые промежуточные каталоги.

Генерирует исключение IOError, если каталог path уже присутствует или не может быть создан.

pathconf(path, name) (UNIX) Возвращает системную информацию, относящуюся к файлу с именем path.

Аргумент name должен быть строкой с именем системного значения или це лым числом. Известные для данной ОС имена системных значений даны в сло варе pathconf_names. Если имя name неизвестно, генерируется исключение ValueError. Если имя не поддерживается ОС (даже если оно включено в pathconf_names), генерируется исключение OSError с errno.EINVAL в ка честве номера ошибки.

pathconf_names (UNIX) Словарь, отображающий имена, воспринимаемые функциями pathconf() и fpathconf(), к целым значениям для этих имен.

readlink(path) (UNIX) Возвращает строку с именем файла (каталога), на который указывает символиче ская ссылка path.

remove(path) (UNIX, Windows, Macintosh) unlink(path) (UNIX, Windows, Macintosh) Удаляют файл с именем path. Для удаления каталогов воспользуйтесь функцией rmdir().

removedirs(path) Функция для рекурсивного удаления каталогов. Работает аналогично функции 21.1. os — основные службы операционной системы rmdir(), но также рекурсивно удаляет и пустые родительские каталоги (если это возможно). Генерирует исключение IOError, если каталог path не может быть удален.

rename(src, dst) (UNIX, Windows, Macintosh) Переименовывает файл (каталог) src в dst.

renames(old, new) Функция для рекурсивного переименования. Работает аналогично функции rename(), но сначала пытается создать родительские каталоги, необходимые для создания new. После переименования old в new удаляет правую часть пути old с помощью функции removedirs().

rmdir(path) (UNIX, Windows, Macintosh) Удаляет каталог с именем path.

stat(path) (UNIX, Windows, Macintosh) Возвращает информацию о файле (каталоге) path в виде кортежа, содержащего как минимум 10 наиболее важных (и переносимых) целочисленных элементов в следующем порядке: st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid, st_size, st_atime, st_mtime, st_ctime. В стандартном модуле stat опреде лены функции и константы, которые будут полезны для обработки результата.

Под ОС Windows некоторые элементы будут иметь произвольные значения.

statvfs(path) (UNIX) Возвращает информацию о файловой системе, на которую ссылается путь path, в виде кортежа из 10 наиболее общих целочисленных элементов в следующем поряд ке: f_bsize, f_frsize, f_blocks, f_bfree, f_bavail, f_files, f_ffree, f_favail, f_flag, f_namemax. В стандартном модуле statvfs определены функции и константы, которые будут полезны для обработки результата.

symlink(src, dst) (UNIX) Создает символическую ссылку с именем dst, указывающую на src.

tempnam([dir [, prefix]]) (UNIX) Возвращает уникальное имя, подходящее для создания временного файла в катало ге dir. Если аргумент dir опущен или равен None, используется общепринятое место для временных файлов. Если задан и не равен None аргумент prefix (стро ка), он используется в качестве приставки к имени временного файла. Функция доступна, начиная с версии 1.6.

tmpnam() (UNIX) Возвращает уникальное имя, подходящее для создания временного файла. Исполь зуется общепринятое место для временных файлов. Функция доступна, начиная с версии 1.6.

TMP_MAX Максимальное количество уникальных имен, которые может сгенерировать функ ция tmpnam() перед тем, как использовать их снова. Эта константа доступна, начиная с версии 1.6.

276 Глава 21. Доступ к средствам, предоставляемым операционной...

utime(path, times) (UNIX, Windows, Macintosh) Устанавливает время последнего доступа и последнего внесения изменений файла path. Начиная с версии 2.0, в качестве аргумента times Вы можете использовать None для того, чтобы установить текущее время. Иначе times должен быть корте жем вида ‘(atime, mtime)’, где atime — время последнего доступа и mtime — время последнего внесения изменений.

21.1.5 Управление процессами Функции, описанные в этом разделе, предназначены для создания и управления процес сами.

Функциям с именами вида exec*() передается список аргументов запускаемой программы. Во всех случаях первый из них передается как собственное имя программы, а не как аргумент командной строки, то есть sys.argv[0], если Вы запускаете про грамму на языке Python. Например, ‘os.execv(’/bin/echo’, [’foo’, ’bar’])’ выведет слово “bar” на стандартный поток вывода, в то время как строка ’foo’ просто игнорируется.

abort() (UNIX, Windows) Посылает сигнал SIGABRT текущему процессу. По умолчанию в UNIX сиг нал SIGABRT приводит к прерыванию процесса и сохранению дампа памяти (‘core’), под Windows процесс прерывается с кодом завершения, равным 3. Про грамма может зарегистрировать другой обработчик сигнала с помощью функции signal.signal().

execl(path [, arg1...]) (UNIX, Windows) Эквивалентно вызову ‘execv(path, (arg1,...))’.

execle(path [, arg1...], env) (UNIX, Windows) Эквивалентно вызову ‘execve(path, (arg1,...), env)’.

execlp(path [, arg1...]) (UNIX, Windows) Эквивалентно вызову ‘execvp(path, (arg1,...))’.

execv(path, args) (UNIX, Windows) Выполняет файл path со списком аргументов args (кортеж или список), заменяя текущий процесс (то есть интерпретатор).

execve(path, args, env) (UNIX, Windows) Выполняет файл path со списком аргументов args (кортеж или список) и окруже нием env (словарь, отображающий имена переменных окружения к их значениям), заменяя текущий процесс (то есть интерпретатор).

execvp(path, args) (UNIX, Windows) Ищет в путях (environ[’PATH’]) файл path и выполняет его аналогично функ ции execv().

21.1. os — основные службы операционной системы execvpe(path, args, env) (UNIX, Windows) Ищет в путях (env[’PATH’]) файл path и выполняет его аналогично функции execve().

_exit(code) (UNIX, Windows) Прерывает выполнение программы с кодом завершения code без выполнения каких-либо дополнительных действий. Нормальным способом прерывания выпол нения программы является вызов sys.exit(n). Функцию _exit() следует ис пользовать только в дочернем процессе после вызова fork().

fork() (UNIX) Создает ответвление от текущего процесса. Возвращает 0 в дочернем процессе и идентификатор дочернего процесса в родительском.

forkpty() (некоторые варианты UNIX) Создает ответвление от текущего процесса, используя новый псевдотерминал в ка честве терминала, контролирующего дочерний процесс. Возвращает пару ‘(pid, fd)’, где pid равен 0 в дочернем процессе и идентификатору дочернего процес са в родительском и fd является файловым дескриптором псевдотерминала. Для большей переносимости используйте модуль pty.

kill(pid, sig) (UNIX) Посылает сигнал sig процессу с идентификатором pid. Смотрите также описание модуля signal.

nice(increment) (UNIX) Добавляет значение increment к текущему приоритету процесса, возвращает но вый приоритет.

plock(op) (UNIX) Блокирует в памяти сегменты программы. Эта функция доступна, начиная с версии 2.0.

spawnv(mode, path, args) (UNIX, Windows) Выполняет отдельным процессом файл path с аргументами args (кортеж или список). Аргумент mode может иметь значения, описанные ниже. На платформах UNIX эта функция доступна, начиная с версии 1.6.

spawnve(mode, path, args, env) (UNIX, Windows) Выполняет отдельным процессом файл path с аргументами args (кортеж или список) и используя env в качестве окружения. Аргумент mode может иметь значения, описанные ниже. На платформах UNIX эта функция доступна, начиная с версии 1.6.

P_WAIT (UNIX, Windows) P_NOWAIT (UNIX, Windows) P_NOWAITO (UNIX, Windows) P_OVERLAY (Windows) P_DETACH (Windows) Возможные значения аргумента mode функций spawnv() и spawnve().

278 Глава 21. Доступ к средствам, предоставляемым операционной...

startfile(path) (Windows) Открывает файл, используя ассоциированную с расширением (или типом) path программу, аналогично команде start стандартного командного интерпретатора Windows (или двойному щелчку мыши в Explorer). Функция заканчивает свое вы полнение сразу же после запуска. Не существует способа дождаться завершения выполнения программы или определения ее кода завершения. Используйте функ цию os.path.normpath() для приведения пути к правильному виду. Функция startfile() доступна, начиная с версии 2.0.

system(command) (UNIX, Windows) Выполняет в стандартном для данной платформы командном интерпретаторе ко манду command (строка). Возвращает код завершения в формате, аналогичном формату результата функции wait(), за исключением Windows 95 и 98 — в этих ОС всегда возвращает 0.

times() (UNIX, Windows) Возвращает кортеж из вещественных чисел, указывающих суммарное затраченное время пользователем, системой, пользователем в дочерних процессах, системой в дочерних процессах и реальное время работы с определенного момента в прошлом.

wait() (UNIX) Ждет завершения дочернего процесса и возвращает кортеж вида ‘(pid, code)’, где pid — идентификатор дочернего процесса и code — код, младший байт кото рого содержит номер сигнала, завершившего выполнение процесса (старший бит установлен, если был записан дамп памяти), а старший байт — код завершения (если номер сигнала равен 0).

waitpid(pid, options) (UNIX) Ждет завершения дочернего процесса, заданного аргументом pid, и возвращает кортеж вида ‘(pid, code)’ (см. описание функции wait()). Точная семантика функции зависит от значения аргумента options, который должен быть равен для обычных операций.

Если аргумент pid больше 0, waitpid() запрашивает информацию для процесса с идентификатором pid. Если аргумент pid равен 0, запрашивается информация для любого дочернего процесса из той же группы, что и текущий процесс. Если ар гумент pid равен -1, запрашивается информация для любого дочернего процесса.

Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 7 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.