Python 如果对象不存在,则创建新对象';不存在于pickle文件中,如果存在,则加载它(使用多个对象的最佳方式?)

Python 如果对象不存在,则创建新对象';不存在于pickle文件中,如果存在,则加载它(使用多个对象的最佳方式?),python,pickle,Python,Pickle,我知道如何处理pickle文件中的单个对象或缺少单个对象,但如果pickle文件中缺少多个对象,我不知道如何执行类似操作 我现在得到的是: 试试看: user1=pickle.load(打开(“users.pkl”、“rb”)) 除了(OSError、IOError)作为e: user1=用户(“user1”) pickle.dump(user1,打开(“users.pkl”、“wb”)) 我想要实现的目标: 试试看: user1=pickle.load(打开(“users.pkl”、“rb”

我知道如何处理pickle文件中的单个对象或缺少单个对象,但如果pickle文件中缺少多个对象,我不知道如何执行类似操作

我现在得到的是:

试试看:
user1=pickle.load(打开(“users.pkl”、“rb”))
除了(OSError、IOError)作为e:
user1=用户(“user1”)
pickle.dump(user1,打开(“users.pkl”、“wb”))
我想要实现的目标:

试试看:
user1=pickle.load(打开(“users.pkl”、“rb”))
user2=pickle.load(打开(“users.pkl”、“rb”))
user3=pickle.load(打开(“users.pkl”、“rb”))
除了(OSError、IOError)作为e:
如果“user1”不在locals()中:
user1=用户(“user1”)
pickle.dump(user1,打开(“users.pkl”、“wb”))
如果“user2”不在locals()中:
user2=用户(“user2”)
pickle.dump(user2,打开(“users.pkl”、“wb”))
如果“user3”不在locals()中:
user3=用户(“user3”)
pickle.dump(user3,打开(“users.pkl”、“wb”))

问题是,如果“user1”不存在,而“user2”不存在,那么它看起来非常混乱,无法正常工作(因为它会立即进入异常状态)。有没有更好的、更像蟒蛇的方式来做这样的事情?AFAIK python文档告诉我们,对于这样的东西,try语句是一种方法,但正如您在上面看到的,我不知道如何正确地实现这个想法(除非我对文件中的每个对象使用单独的try语句,这将导致大量代码)。

Pickle文件是按顺序编写的。由于对象的pickle的长度可能会有所不同,因此通常不可能在现有文件中用一个pickle替换另一个pickle,就像用较长的pickle替换文本文件中的短行一样

您现有的代码将相同的pickle读入
user1
user2
user3
,因此我不确定如何从完全相同的表达式中获得不同的值

考虑改用该模块,该模块在许多方面都像磁盘上的字典,允许您非常轻松地测试特定键的存在与否

下面是一些代码,可以提示您如何继续:

>>> with shelve.open("my_database") as db:
...     db["user1"] = [1, 2, 3]
...     db["user2"] = [2, 3, 4]
...
>>> with shelve.open("my_database") as db:
...     if "user1" in db:
...         print(db["user1"])
...     else:
...         print("Entry needs creating!")
...
[1, 2, 3]

上面的代码只是我想要的示例,而不是工作代码的示例(如果这让任何人感到困惑,请原谅)。你的建议就像一个符咒,使用起来很简单:)真的很感谢你的帮助!我不熟悉序列化,不知道该用什么。非常感谢!