我正在学习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
我不确定文件中是如何写入另一个字典的。请指导我。
答案 0 :(得分:1)
用这样的代码编写另一个json几乎是不可能的。你的代码不好。你混合太多尝试打开,寻找和截断,错误的文件模式选择可能。我会教你一点点变得更好:
问题可能是'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)