编辑已保存的数据
我需要保存一段复杂的数据:
list = ["Animals", {"Cats":4, "Dogs":5}, {"x":[], "y":[]}]
我打算在同一个文件里保存几个这样的列表,同时我也计划使用pickle模块来保存这些数据。我还希望能够访问这些被pickle处理过的数据,并且在第二个字典里的列表中添加一些项目。所以在我解压缩数据并进行编辑后,列表可能会变成这样:
list = ["Animals", {"Cats":4, "Dogs":5}, {"x"=[1, 2, 3], "y":[]}]
最好是我能把这个列表(用pickle)保存在我最初获取这段数据的同一个文件里。但是,如果我只是把数据重新用pickle处理并保存到同一个文件(假设我最开始保存的是“File”),那么我最终会在那个文件里得到两个相同列表的副本:
a = open("File", "ab")
pickle.dump(list, a)
a.close()
有没有办法用pickle替换文件中的编辑过的列表,而不是添加一个第二个(更新过的)副本?或者,我应该考虑其他方法来保存这些数据吗?
2 个回答
3
你可以选择以写入的方式打开文件,而不是追加内容,这样的话新写入的数据会覆盖掉之前的数据。不过,如果文件里还有其他数据,这样做就会有问题。如果你真的想要在一个被“腌制”的文件中有选择地替换数据,我很遗憾地告诉你,这样是行不通的。如果这是一个常见的操作,建议你看看像sqlite这样的数据库,可能会对你有帮助。
3
我觉得你想用的是shelve模块。它会创建一个文件(底层使用了pickle),这个文件里保存了一个变量的内容,你可以通过键来访问这些内容(可以想象成一个持久化的字典)。