首页 > 解决方案 > 在 pickle 文件中添加新密钥

问题描述

我想通过迭代方式存储数据。

我怎么能在已经包含字典的泡菜中添加一些新键?

例如

with open(filename_directory, 'wb') as f:
    pickle.dump({"a" : 1, "b":2 }, f)

new_dict_ = {}
for i in range(10):
    new_dict_ [i] = i

with open(filename_directory, 'a') as f:
    pickle.dump( update_dict_with_my( new_dict_ ) , f)

标签: pythondictionarypickle

解决方案


附加到泡菜文件是没有意义的。pickle 格式是一种二进制结构,如果您附加到包含一种结构的文件中,则最多会忽略其余部分,最坏的情况是您破坏了现有数据。

(顺便说一句,追加到 json 文件也没有什么意义:在这两种情况下,新数据都必须插入到现有结构中,而不是追加

你可以:

  • 读回字典
  • 用新值更新它(或者反过来,它有不同的效果取决于是否有一些共享密钥)
  • 将其转储回磁盘

像这样:

with open(filename_directory, 'wb') as f:
    pickle.dump({"a" : 1, "b":2 }, f)

new_dict_ = {i:i for i in range(10)}

with open(filename_directory, 'rb') as f:
    new_dict_.update(pickle.load(f))

with open(filename_directory, 'wb') as f:
    pickle.dump( new_dict_ , f)

以新密钥为最高优先级读取/更新/转储,首先读取,更新和转储:

with open(filename_directory, 'rb') as f:
    new_dict_ = update(pickle.load(f))
for i in range(10):
    new_dict_ [i] = i

with open(filename_directory, 'wb') as f:
    pickle.dump( new_dict_ , f)

json请注意,如果您打算在字典中序列化基本类型,则使用格式可能会更好。至少转储的格式是可读的,甚至可以手动更新,如上所述,如果您尝试附加到 json 文件,即使它是文本文件,它也不起作用。至少会有需要移动的]}最终的字符,添加昏迷等......算了吧)。


推荐阅读