Попытка использовать atomic_write на объекте pickle - PullRequest
0 голосов
/ 22 мая 2018

Я хочу сохранить объект pickle (не только dict, который может получить строковое представление) на диск "безопасным" способом, поэтому он будет выполнять fsync, os.replace и т. Д., Как в atomic_write, для строк.

это мой код:

from atomicwrites import atomic_write
from dataIO import pk
import pickle

dict1 = {'goo':1,'mos':2}
with atomic_write('foo.txt', overwrite=True) as f:
    f.write(pickle.dumps(dict1, protocol=pickle.HIGHEST_PROTOCOL))

Что я делаю не так?Я получаю:

TypeError: must be str, not bytes

Решение:

from atomicwrites import atomic_write
from dataIO import pk
import pickle, json

dict1 = {'goo':1,'mos':2}
with atomic_write('foo.pkl', mode='wb', overwrite=True) as f:
    #f.write(json.dumps(dict1))
    f.write(pickle.dumps(dict1, protocol=pickle.HIGHEST_PROTOCOL))

dictname = pickle.load(open("foo.pkl", "rb"))
print(dictname)

Но я не понимаю, почему нагрузка работает, а нагрузка - нет.Может ли кто-нибудь подтвердить, что мой код правильный?

...