我正在使用Discord.py创建一个Discord bot。我创建了一个命令,该命令将使用用户指定的值更新外部JSON文件。在测试该命令时,我注意到某些单词,例如tes
,会在JSON文件末尾添加不必要的大括号。这个问题只出现在某些单词上,大多数单词都没有任何问题
Python文件
import json
with open("./file.json", "r+") as file:
f = json.load(file)
file.truncate()
f["key"] = "tes"
file.seek(0)
json.dump(f, file, indent = 4)
JSON文件
{
"key": "tes"
}
}
我尝试过使用f.update({"key": "tes"})
,但没有区别
编辑:
通过将file.truncate()
移到file.seek(0)
下方解决了该问题
所以-我知道你已经做到了,但是你的
file.truncate()
和file.truncate()
有点像黑魔法ey,没有太多使用,这会使你的代码不那么地道,更难维护我认为,如果使用单独的文件句柄来读取和写入文件,这将更干净
当您在没有参数的情况下调用
file.truncate()
时,它是truncates the file at the current location(文件的结尾)。然后,当您调用file.seek(0)
时,它移动到文件的开头,并开始在旧数据之上写入新数据。如果新内容比旧内容短(例如,将“test”字符串替换为“tes”),则一些旧内容将在末尾保留。以下是几种解决方案:file.truncate()
更改为file.truncate(0)
file.seek(0)
,然后在将数据写入文件之后或之后立即使用file.truncate()
open(filename, 'r')
块读取文件,然后使用单独的open(filename, 'w')
块回写文件(自动替换完整内容)相关问题 更多 >
编程相关推荐