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

问题描述 投票:1回答:1

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

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

python json file io
1个回答
1
投票

使用这样的代码编写另一个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)        
© www.soinside.com 2019 - 2024. All rights reserved.