python - 如果他们不存在,我如何让我的不和谐机器人将某人添加到 json 文件中
问题描述
我正在制作一个不和谐的经济机器人,它将用户的钱存储在一个 json 文件中。但我不知道如何让它将另一个用户添加到 json 文件中,如果他们不存在的话。
async def work(ctx):
oldmny=json.load(open("money.json", "r"))[str(ctx.author.id)]
newmny=random.randint(10,100)
nowmny=oldmny+newmny
x={
str(ctx.author.id):nowmny
}
json.dump(x, open("money.json", "w+"), indent = 4)```
解决方案
在您的代码中,您分配给x
一个全新的字典,具有单个键/值对。然后,您将该字典写入您读取的同一个 JSON 文件中。相反,您应该更新从 JSON 文件加载的字典,并将更新后的字典写回文件。您的代码应该是:
async def work(ctx):
money = json.load(open("money.json", "r"))
oldmny = [str(ctx.author.id)]
newmny = random.randint(10,100)
nowmny = oldmny + newmny
money[ctx.author.id] = nowmny
json.dump(money, open("money.json", "w+"), indent = 4)
但是请注意,您使用 JSON 作为数据存储,任何更新,即使是单个项目(如您的情况),都需要对整个文件进行完全读取和完全写入。这并不是 JSON 文件真正适合的地方。它们更适合在进程之间发送数据,或者记录不经常加载,甚至更不经常更新的数据。
推荐阅读
- angular - 示例“https://angular.io/tutorial/toh-pt6”的 catchError 它不起作用
- windows - Win10 上的 Docker - 是否可以有多个终端?
- ios - 为什么命令 `pod install` 或 `pod update pod_name` 会安装这么多文件?
- package - 如何修复“E:无法找到包裹”
- linux - 删除设备时,libudev udev_device_get_sysattr_value() 为 idVendor/idProduct 返回 NULL
- hook - 如何在 prestashop 的结帐过程中获取挂钩列表?
- symfony - 使用 kernel.terminate 事件的测试控制台命令 (KernelTestCase)
- java - Android Studio Sqllite autoincrement reset
- php - 如何将 HTML 表格转换为 Excel 电子表格
- java - java.lang.ClassCastException for interface On android java