所以没有错误,没有问题,只是不会更改json文件?这是代码:
@client.command()
@commands.check(is_owner)
async def points_give(member: discord.Member, amount:int=None):
with open("users.json", "r") as f:
users = json.load(f)
await add_experience(users, member, amount)
async def add_experience(users, member, exp):
with open('users.json', 'r')as f:
users = json.load(f)
users[member.id]["experience"] += exp```
答案 0 :(得分:1)
尝试一下:
@client.command()
@commands.check(is_owner)
async def points_give(member: discord.Member, amount:int=0):
with open("users.json", "r") as f:
users = json.load(f)
await add_experience(users, member, amount)
async def add_experience(users, member, exp):
users[member.id]["experience"] += exp
with open('users.json', 'w+') as f:
json.dump(users, f)
答案 1 :(得分:0)
json.load()
读取文件流并返回字典。
如果要更改文件中的值,则需要以写入模式打开文件,然后使用json.dump()
重写文件。
with open('users.json', 'w+') as f:
json.dump(users, f)
答案 2 :(得分:0)
我可以看到两个问题。
首先,您的async def add_experience(users, member, exp):
已经接受了一个参数用户。但是您再次打开json文件并重新加载用户。
第二,您永远不要将添加的体验写回到文件中。因此,您更新体验点后就立即执行这两个功能,就不必再去理会了,因为您永远不会回写它。
也许您在第二个函数中有一个错字,并且不想重新读取文件,而是将这些点写回到json中?
答案 3 :(得分:0)
打开文件时可能会出现一些错误。最好在代码中使用try / except。然后,如果有错误,您可以看到。
def Check(file):
try:
open(file, "w")
return 1
except IOError:
print ("Error: File does not exist.")
return 0
Except:
print ("Error")
return 0
在您的部队中
result = Check("yourFileName")
if (result == 1):
#Do what you want
要添加到json数据:
dict = {key_value_to_be_added}
with open('filename', 'r') as f:
data = json.load(f)
data.update(dict)
with open('filename', 'w+') as f:
json.dump(data, f)