JSON文件I / O:额外数据错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON文件I / O:额外数据错误相关的知识,希望对你有一定的参考价值。

我目前正在学习Python。对于一个小项目,我正在编写一个脚本来转储和加载从Web中提取的JSON。每次拉数据后都需要不断更新文件,为此,我编写了以下代码。

    with open(os.path.join(d,fname),'a+') as f:
        try:
            f.seek(0)
            t = json.load(f)
            for i in t:
                tmp[i]=t[i]
        except Exception as e:
            print(e,"New File ",fname," is created in ",d)
        f.truncate()
        json.dump(tmp,f)

自从第一次运行该程序以来,我已经放置了一个try-catch块,该文件没有写入数据。

当我运行脚本时,它按预期工作,但是当我第四次运行相同的脚本时,它会给出EXTRA DATA异常。

额外数据:第1行第29245行(字符29244)新文件TSLA_dann创建于2017年12月20日

我不确定文件中是如何写入另一个字典的。请指导我一样。

答案

使用这样的代码编写另一个json几乎是不可能的。你的代码不好。你混合太多尝试打开,寻找和截断,错误的文件模式选择可能。我会教你一点点变得更好:

  1. 尝试应该只涵盖可能引起错误的内容。
  2. 寻求不需要总是寻求(0)是打开后。
  3. open(x,'a +)意味着追加到最后我想(我可能是错误的原因)。
  4. 使用空间。
  5. 耐心点。

问题可能是'a +'模式但是清洁代码并不重要:)

相信我,我写了25万行程序没有问题。

干净的代码作为一个很好的例子应该工作(我没有经过测试 - 你可以解决它,如果一个字母丢失或只是运行):

# read
file_path = os.path.join(d, fname)
with open(file_path, 'r') as f: # 'r' is read can be skipped
    try:
        t = json.load(f)
    except Exception as e:
        print('%s %s' % (e, file_path))

for i in t:
    tmp[i] = t[i]

# write
with open(file_path, 'w') as f:
    json.dump(tmp, f)        

以上是关于JSON文件I / O:额外数据错误的主要内容,如果未能解决你的问题,请参考以下文章

Python json.load JSONDecodeError:尝试加载多个 json 字典时出现额外数据错误

python常用代码片段总结

能否使用require('.json')的方式加载大量JSON文件?

以下代码片段的算法复杂度

php 文件 I/O 和 ajax 的问题

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”