Python Glossary English

все Python 3Файлы и I/Oпонятие

pickle

pickle

Сериализация Python-объектов в бинарный формат. Сохраняет произвольные объекты. Не безопасно для ненадёжных данных!

Синтаксис

import pickle
pickle.dump(obj, f)
pickle.load(f)

Файл обязательно открывается в бинарном режиме ('wb' для dump, 'rb' для load) — с обычным 'w' будет TypeError. Формат чисто питоновский и завязан на код: при загрузке классы объектов должны импортироваться по тому же пути, что и при сохранении, поэтому после переименования модуля или класса старые .pkl перестают читаться — для обмена данными с другими программами берите JSON.

Примеры

import pickle, os, tempfile
data = {'key': [1,2,3], 'val': (4,5)}
path = os.path.join(tempfile.gettempdir(), 'data.pkl')
with open(path,'wb') as f:
    pickle.dump(data, f)
with open(path,'rb') as f:
    loaded = pickle.load(f)
print(loaded)  # → {'key':[1,2,3],'val':(4,5)}
import pickle, os, tempfile
# dumps/loads — в bytes
bytes_data = pickle.dumps([1,'hello',3.14])
print(bytes_data[:10])  # → ? первые байты пикла, зависят от протокола
print(pickle.loads(bytes_data))  # → [1,'hello',3.14]
import pickle, os, tempfile
# Сериализация объекта класса
class Point:
    def __init__(self,x,y): self.x=x;self.y=y
    def __repr__(self): return f'Point({self.x},{self.y})'
p = Point(1,2)
bytes_p = pickle.dumps(p)
print(pickle.loads(bytes_p))  # → Point(1,2)
import pickle, os, tempfile
# Протоколы
print(pickle.HIGHEST_PROTOCOL)  # → 5
bytes2 = pickle.dumps([1,2,3], protocol=2)
print(pickle.loads(bytes2))  # → [1,2,3]
import pickle, os, tempfile
# ВНИМАНИЕ: pickle небезопасен для чужих данных!
# Никогда не делай pickle.load() из ненадёжного источника!

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности