这似乎是一个非常简单的问题,我试图读取一个JSON文件并修改一些字段。在
with open("example.json", "r+") as f:
data = json.load(f)
# perform modifications to data
f.truncate(0)
json.dump(data, f)
在我第一次手动创建一个JSON文件并存储正确的JSON文件时,它起作用了,但是当我第二次运行同一个脚本时,它给了我一个错误:
ValueError: No JSON object could be decoded
为什么?令我惊讶的是,json
模块无法解析模块本身创建的文件。在
根据您提供的代码,以及您正在尝试做的事情(将文件光标返回到文件的开头),您实际上并没有使用
f.truncate
来执行此操作。你实际上是在截短文件。i、 e.完全清除文件。在根据
truncate
方法上的help
:将光标返回到文件开头的实际操作是使用
seek
。在seek帮助:
^{pr2}$因此,显式地返回到您想要的文件的开头
f.seek(0)
。在为了提供一个正在发生的事情的例子。以下是truncate的情况:
文件中包含以下内容:
调用
truncate
并查看该文件现在将为空:使用
f.seek(0)
:第一个输出之间的长间隙显示光标位于文件末尾。然后我们调用
f.seek(0)
(这个0
输出来自f.seek(0)
调用),并输出我们的f.read()
。在您缺少一行,
f.seek(0)
相关问题 更多 >
编程相关推荐