【发布时间】:2017-09-25 12:16:51
【问题描述】:
我为自己编写了一个笔记工具作为我的第一个程序。它实际上在大多数情况下工作得非常好,但是有时程序会在 list 或 dict 的末尾写一个额外的 ] 或 } 存储在所述 json 文件中。
这种情况不会经常发生,我认为只有在我编写新代码行或更改读取/写入所述文件的现有行时才会发生这种情况。我不是 100% 确定,但这就是它的样子。
例如,我有一个 list 存储在一个文件中,我使用 indent="" 标志来确保它在写入文件时对我来说更具可读性,如果我不得不编辑所述文件。有时在更改某些代码或添加代码后运行我的程序时,我会收到一个错误,指出文件中包含“额外数据”。
错误看起来像这样:
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 6 column 2 (char 5791)
错误的原因是这样的:
[
"Help",
"DataTypes",
"test",
"Variables",
]] # the error would be cause by this extra ] at the end of the list
我不明白的是为什么程序有时会在我的 json 文件中的数据末尾添加额外的 ] 或 }?
当我打开文件或转储到文件时,我做错了什么吗?
以下是我用于打开文件和转储到文件的一些代码部分:
path = "./NotesKeys/"
notebook = dict()
currentWorkingLib = ""
currentWorkingKeys = ""
#~~~~~~~~~~~~~~~~~~~< USE TO open all files in Directory >~~~~~~~~~~~~~~~~~~~
with open("%s%s"%(path,"list_of_all_filenames"), "r") as listall:
list_of_all_filenames = json.load(listall)
def openAllFiles(event=None):
global path
for filename in os.listdir(path):
with open(path+filename, "r+") as f:
notebook[filename] = json.load(f)
openAllFiles()
这就是我如何更新文件中的数据。只需忽略e1Current, e1allcase, e2Current,它们用于在存储笔记的字典中保持用户输入文件名(dict 键)小写的格式,并保持用户为显示列表输入的大小写。这应该与文件读写问题无关。:
编辑:根据评论者的要求删除了不相关的代码。
#~~~~~~~~~~~~~~~~~~~< UPDATE selected_notes! >~~~~~~~~~~~~~~~~~~~
dict_to_be_updated = notebook[currentWorkingLib]
dict_to_be_updated[e1Current] = e2Current
with open("%s%s"%(path,currentWorkingLib),"r+") as working_temp_var:
json.dump(dict_to_be_updated, working_temp_var, indent = "")
我知道如何打开文件和使用数据以及如何将数据转储到所述文件并根据新转储的数据更新程序变量中加载的内容。
在这个过程中我是否遗漏了一些重要的东西?我应该做些什么来确保 json 文件中的数据完整性吗?
【问题讨论】:
-
@TankorSmash 基本上是MCVE。
-
@TankorSmash 删除了不相关的东西
标签: python json list file dictionary