Я хочу сохранить объект 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)
Но я не понимаю, почему нагрузка работает, а нагрузка - нет.Может ли кто-нибудь подтвердить, что мой код правильный?