import pickle data = pickle.Unpickler(file, *, fix_imports=True, encoding="ASCII", \ errors="strict", buffers=None)
file
- открытый поток данных pickle
,fix_imports=True
- сопоставление данных Python2 и Python3,encoding="ASCII"
- кодировка для чтения данных, генерируемых Python2,errors="strict"
- обработчик ошибок декодирования,buffers=None
- аргумент buffer_callback
указанный при создании объекта pickle.Pickler()
.Класс Unpickler()
модуля pickle
читает двоичный поток данных pickle
из файла file
.
Версия протокола pickle
определяется автоматически, поэтому аргумент протокола не требуется.
Аргумент file
должен иметь три метода как в интерфейсе io.BufferedIOBase:
read()
, который принимает целочисленный аргумент, readinto()
, который принимает аргумент buffers
, fp.readline()
, который не требует аргументов. Таким образом, файл file
может быть файлом на диске, открытом для чтения байтов, объектом io.BytesIO
или любым другим пользовательским объектом, который соответствует этому интерфейсу.
Необязательные аргументы fix_imports
, encoding
и errors
используются для управления поддержкой совместимости потока pickle
, генерируемого Python2.
Если fix_imports
имеет значение True
, то pickle
попытается отобразить старые имена Python2 на новые имена, используемые в Python3.
Аргументы encoding
и errors
указывают pickle
как декодировать 8-битные строковые экземпляры, генерируемые Python2. По умолчанию это 'ASCII'
и 'strict'
соответственно. Кодировка encoding
может быть 'bytes'
для чтения этих 8-битных строковых экземпляров как байтовых объектов. Использование encoding='latin1'
требуется для извлечения массивов NumPy
и экземпляров datetime.datetime()
, datetime.date()
и datetime.time()
генерируемые Python2.
Если аргумент buffers=None
(по умолчанию), то все данные, необходимые для десериализации, должны содержаться в потоке pickle
. Это означает, что аргумент buffer_callback=None
, когда был создан экземпляр pickle.Pickler()
или когда вызывался pickle.dump()
или pickle.dumps()
.
Если аргумент buffers
не равен None
, то это должна быть итерация с поддержкой буфера, который используется каждый раз когда, поток pickle
ссылается на внешнее представление буфера. Такие буферы были переданы в качестве аргумента buffer_callback
при создании объекта pickle.Pickler()
.
data.load()
:Метод data.load()
читает упакованное представление объекта pickle
из открытого файлового объекта и возвращает указанную в нем иерархию восстановленных объектов.
>>> import pickle, pprint >>> data = {'a': [1, 2.0, 3, 4+6j], ... 'b': ('string', u'Unicode string'), ... 'c': None} # упаковываем объекты Python >>> with open('data.pkl', 'wb') as fp: ... pickle.Pickler(fp).damp(data) # восстанавливаем объекты Python >>> with open('data.pkl', 'rb') as fp: ... a = pickle.Unpickler(fp).load() >>> pprint.pprint(a, width=60) # {'a': [1, 2.0, 3, (4+6j)], # 'b': ('string', 'Unicode string'), # 'c': None}
data.persistent_load(pid)
:Метод data.persistent_load(pid)
по умолчанию вызывает исключение UnpicklingError
.
Если определен, то data.persistent_load()
должен возвращать объект, указанный в постоянном идентификаторе pid
. Если обнаружен недопустимый pid
, то необходимо вызвать исключение UnpicklingError
.
Смотрите в качестве примера раздел "Cохранение внешних объектов в pickler
"
data.find_class(module, name)
:Метод data.find_class()
при необходимости импортирует модуль module
и возвращает из него объект с именем name
, где аргументы module
и name
являются объектами str
. Обратите внимание, что в отличие от его названия data.find_class()
также используется для поиска функций.
Подклассы могут переопределить этот метод, чтобы получить контроль над тем, какие типы объектов и как могут быть загружены, потенциально снижая риски безопасности. В качестве примера смотрите раздел "Распаковка pickle
данных из ненадежных источников".
Вызывает событие аудита pickle.find_class
с аргументами module
и name
.