python - 在 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)
解决方案
附加到泡菜文件是没有意义的。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 文件,即使它是文本文件,它也不起作用。至少会有需要移动的]
或}
最终的字符,添加昏迷等......算了吧)。
推荐阅读
- reactjs - 如何使用 jest 对具有异步 componentDidMount 的 HOC 进行单元测试?
- pytorch - Pytorch:将 1d 重塑为 2d 目标
- python-3.x - txt 文件中随机且唯一的
- c# - 调试 jquery dataTable 服务器端:ERR_CONNECTION_RESET 200 错误
- configuration - shopify 中的“为配置添加主题设置” - 错误消息“意外令牌”不断出现?
- asp.net-mvc - 其中 + FirstOrDefault()。ArgumentNullException 值不能为空
- c++ - 如何默认初始化向量元素?
- javascript - 为什么我的 Bootstrap-Modal 不能动态加载?
- swagger - OpenAPI V2(Swagger)如何在 Base64 编码传递到授权标头之前强制 client_id 字段进行 URL 编码?
- python - 连接后保留 NaN 值