【问题标题】:Add a new key in a pickle file在 pickle 文件中添加新密钥
【发布时间】:2018-06-29 12:12:27
【问题描述】:

我想以迭代的方式存储数据。

如何在已经包含 dict 的泡菜中添加一些新键??

例如

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,你不能追加到pickle文件(当然不能使用文本模式)

标签: python dictionary pickle


【解决方案1】:

附加到泡菜文件是没有意义的。 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 文件,即使它是文本文件,它也不起作用。至少会有 ]} 最终字符需要移动、添加昏迷等等……算了)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2021-10-31
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多