gpt4 book ai didi

python - 我的程序有时会在 json 文件中的数据末尾写一个额外的 ] 或 }?

转载 作者:太空狗 更新时间:2023-10-30 02:39:44 25 4
gpt4 key购买 nike

我为自己编写了一个笔记工具作为我的第一个程序。它在大多数情况下实际上工作得很好,但有时程序会在 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 文件中的数据完整性吗?

最佳答案

您正在以读写模式打开文件,r+:

with open("%s%s"%(path,currentWorkingLib),"r+") as working_temp_var:

这意味着您将写入一个已经有数据的文件,有时现有数据比您现在写入文件的数据要长 .这意味着您最终会得到一些尾随数据。

您可以通过将较短的演示字符串写入文件,然后使用 r+less 数据写入同一文件,然后再次读取来看到这一点:

>>> with open('/tmp/demo', 'w') as init:
... init.write('The quick brown fox jumps over the lazy dog\n')
...
44
>>> with open('/tmp/demo', 'r+') as readwrite:
... readwrite.write("Monty Python's flying circus\n")
...
29
>>> with open('/tmp/demo', 'r') as result:
... print(result.read())
...
Monty Python's flying circus
r the lazy dog

不要这样做。使用 w 写入模式,以便首先截断文件:

with open("%s%s"%(path,currentWorkingLib), "w") as working_temp_var:

这确保在您编写新的 JSON 文档之前,您的文件被缩减为 0 大小。

关于python - 我的程序有时会在 json 文件中的数据末尾写一个额外的 ] 或 }?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com