我有一个discord bot,它将用户信息保存在一个json文件中,如下所示:https://i.stack.imgur.com/eh12z.jpg
因此,我需要向所有用户添加一个新的json密钥(name="House", value=False)
。我以前尝试过json.dump(house, json_file)
机器人不工作。
重要信息:我有以下功能:
要打开一个新的json帐户:
async def open_account(user):
users = await get_bank_data()
if str(user.id) in users:
house = users[str(user.id)]['House'] = False
with open("main.json", 'w') as f:
f.write(json.dumps(house))
return False
else:
users[str(user.id)] = {}
users[str(user.id)]["wallet"] = 0
users[str(user.id)]["bank"] = 0
users[str(user.id)]["House"] = False
读取json文件:
async def get_bank_data():
with open("main.json", "r") as f:
users = json.load(f)
return users
其他信息:user
值为ctx.author
您可以编写一个1次方法,在该方法中循环json中的所有用户以添加新字段,类似于以下内容:
async def open_account(user):
users = await get_bank_data()
for user in users:
house = user['House'] = False
with open("main.json", 'w') as f:
f.write(json.dumps(house))
如果你想为服务器中的每个用户添加字段,你可以循环所有成员添加到json中,如下所示:
users = await get_bank_data()
async for member in guild.fetch_members():
house = users[str(member.id)]['House'] = False
with open("main.json", 'w') as f:
f.write(json.dumps(house))
只需在本地运行此脚本即可添加;"房子";main.json
文件中每个用户的密钥
with open("main.json", "r") as f:
bank_data = json.load(f)
# scroll through every user
for key in bank_data.keys():
# If there is no "House" key for a user
if bank_data[key].get("House") is None:
# Add the key
bank_data[key]["House"] = False
# Save the json
with open("main.json", 'w') as f:
f.write(json.dumps(bank_data))
Btwget_bank_data
不需要是async
函数,因为它不使用任何异步函数