正在保存字典,但正在覆盖上次输入的键

2024-07-02 11:00:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个困难的时候,试图保存和更新字典的pickle文件的基础上输入。在运行命令并输入新的show之后,dictionary不会添加新的键和值。为什么?我已经关注了一个月了很多帖子,尝试了一些基本的方法,但是最后总是被覆盖。你知道吗

import pickle

user_settings = {'mjp3LhFUUS8ZM7zW8UV4tHTDyD4=': {'notify': {}}}
user_input = input('Command: ')

def changedict():
    if user_input == 'run':
        newshow = input("New show: ")
        user_notify = user_settings['mjp3LhFUUS8ZM7zW8UV4tHTDyD4=']['notify']
        print(user_notify)
        user_notify[newshow] = 242525
        pickle.dump(user_settings, open("save.p", "wb"))
        print(user_settings)
    elif user_input == 'read':
        readdict = pickle.load(open("save.p", "rb"))
        print(readdict)

    else:
        print('Not a command')

changedict()

当我运行并添加一个新节目时,我会收到{'mjp3LhFUUS8ZM7zW8UV4tHTDyD4=': {'notify': {'test': 242525}}},但再次运行并尝试添加一个新节目后,我会收到{'mjp3LhFUUS8ZM7zW8UV4tHTDyD4=': {'notify': {'test2': 242525}}}。我想做的是让字典像这样保存{'mjp3LhFUUS8ZM7zW8UV4tHTDyD4=': {'notify': {'test': 242525}, {'test2': 242525}}}


Tags: input字典settingssaveshownotifyopen节目
1条回答
网友
1楼 · 发布于 2024-07-02 11:00:17

我猜当你说你再次运行这个程序的时候,你的意思是你完全再次运行这个脚本,使用-python <script.py>。你知道吗

那么问题是,对于程序的每次运行,您都将用户设置字典重新定义为-

user_settings = {'mjp3LhFUUS8ZM7zW8UV4tHTDyD4=': {'notify': {}}}

如果用户输入命令run,那么您只是将用户的输入添加到此用户设置中,而不是再次从文件中读取词典。你知道吗

所以这会用用户输入的内容覆盖字典。你知道吗

仅当无法从文件中读取时,才可以设置该值。你知道吗

示例-

import pickle

try:
    user_settings = pickle.load(open("save.p", "rb"))
except (IOError, pickle.UnpicklingError):
    user_settings = {'mjp3LhFUUS8ZM7zW8UV4tHTDyD4=': {'notify': {}}}

IOError-如果文件-save.p不存在,它将捕获异常。 pickle.UnpicklingError-如果文件save.p不包含正确的pickle数据,它将捕获异常。你知道吗

相关问题 更多 >