首页 > 解决方案 > 尝试在泡菜对象上使用 atomic_write

问题描述

我想以“安全”的方式将泡菜对象(不仅是可以获取字符串表示的字典)存储到磁盘上,因此它将执行 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)

但我不明白为什么负载工作而负载不工作。有人可以验证我的代码是否正确吗?

标签: pythondictionarypickleatomicdump

解决方案


推荐阅读