Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 [ 82 ] 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145

20.3. marshal - байт-компилированное представление объектов 263

методы 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. Лишние символы в строке игнорируются.



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

error

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

pack(format, valuel ...)

Возвращает строку, содержащую значения valuel упакованные в соответ-

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

unpack(format, string)

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

calcsize( format)

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

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

Символ

Тип языка C

Тип объекта в языке Python

- (пустой байт)

- (пустой байт)

char

символ (строка длиной 1)

signed char

unsigned char

short

unsigned short

unsigned int

long int (int, если в языке C тип int меньше, чем long)

long

unsigned long

long int

float

float

double

float

char[]

string

char[]

string

void *

20.4 struct - преобразование объектов в структуры языка C



20.4. struct - преобразование объектов в структуры языка C 265

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

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

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

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

Символ Порядок следования байтов Размер и выравнивание

@ родной родные

= родной стандартные

< little-endian стандартные

> big-endian стандартные

! общепринятый в сети (= big-endian) стандартные

Символ формата P может быть использован только с "родным" порядком следования байтов.

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

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

>>> from struct import * >>> packChhl, 1, 2, 3) \001\000\0 02\00 0\003\000\000\000

>>> unpackChhl, \001\000\002\000\003\000\000\000)

(1, 2, 3)

>>> calcsize(hhl)



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 [ 82 ] 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145