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

时间:2017-12-20 18:12:24

标签: python json file io

我正在学习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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 尝试应该只涵盖会引起错误的内容。
  2. 寻求不需要总是在开启后寻求(0)。
  3. open(x,'a +)意味着追加到最后我想(我可能是错误的原因)。
  4. 使用空格。
  5. 要耐心等待。
  6. 问题可能是'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)