擅长:python、mysql、java
<p>为了安全性/一致性,您需要加载旧数据,对其进行修改,然后将其写回。在</p>
<p>将当前<code>with</code>和<code>write</code>更改为:</p>
<pre><code># If file guaranteed to exist, can use r+ and avoid initial seek
with open(results_file, 'a+') as f:
f.seek(0)
combined_facts = json.load(f)
combined_facts.update(facts_data)
f.seek(0)
json.dump(combined_facts, f, sort_keys=True, indent=4)
f.truncate() # In case new JSON encoding smaller, e.g. due to replaced key
</code></pre>
<p>注意:如果可能的话,您希望使用<a href="https://stackoverflow.com/a/40245798/364696">pault's answer</a>来最小化不必要的I/O,如果数据检索应该是逐段进行的,并且在每个项变得可用时立即更新,那么就应该这样做。在</p>
<p>请注意,最不安全的方法是找到后面的大括号,删除它,然后写出一个逗号,后跟新的JSON(从JSON表示中删除前导的大括号)。它的I/O密集度要低得多,但也不太安全,不会清除重复项,不会对主机进行排序,根本不验证输入文件,等等,所以不要这样做。在</p>