【发布时间】:2021-10-22 01:47:48
【问题描述】:
我正在尝试将字典放入 .txt 文件,然后使用 json.load(File.read()) 将字符串解析为字典。
由于某种原因,它无法正常工作。
代码:
import json
File = open(r"{}.txt".format(path), 'w')
File.write(json.dumps({"Key":"Value"}))
File.close()
#There the .txt file is {'Key':'Value'}
File = open(r"{}.txt".format(path), 'r')
Dictionary = json.loads(File.read())
错误:
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
json.loads(FIle.read())
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\json\__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
但是当我这样做时:
>>> json.dumps({"Key":"Value"})
'{"Key": "Value"}'
>>> json.loads('{"Key": "Value"}')
{'Key': 'Value'}
>>>
没有出错。
为什么会这样?提前感谢您的回答。
编辑
非常感谢 cmets 中的谁建议我使用 json.load(),它奏效了。
>>> json.load(open(r"C:\\Users\FLAK-ZOSO\Desktop\mlmlm.txt", 'r+'))
{'Key': 'Value'}
>>> Dictionary = json.load(open(r"C:\\Users\WouldYouLikeToKnow\Desktop\mlmlm.txt", 'r+'))
>>> Dictionary
{'Key': 'Value'}
问题是文件结果为空,因为在 File.close() 之前没有保存编辑。
谢谢大家帮助我。
【问题讨论】:
-
.read方法可能会添加一个额外的'\n'字符来指示换行。你可能想用.strip("\n")去掉它 -
还有另一种接受文件的方法 (
json.load())。你可以做json.load(File)。写入文件也有类似的方法:json.dump(File, data) -
该代码不会产生该错误。
-
回溯显示
FIle.read(),而不是File.read()- 你确定你是从你认为你是的文件中读取,而不是之前打开的恰好是空的文件吗? -
@Sujay
read不会那样做。即使有,为什么不干脆让loads忽略它呢?
标签: python json python-3.x dictionary