Python中如何单次打开文件完成JSON文件的读写更新操作
问题根因
你用r+、w+模式踩坑是这两个打开模式的默认机制导致的,不是写法问题:
r+是读写模式,打开后不会清空原文件,但初始指针在文件开头,当你用json.load()读完整个文件内容后,文件指针会停在原文件的末尾位置,此时直接写入内容自然会追加到原文件后面;就算手动把指针移回开头,如果新写入的JSON长度比原内容短,文件后半段还会残留旧内容的碎片,直接导致JSON格式损坏。w+虽然也支持读写,但打开文件的瞬间会直接清空所有原内容,当然读不到之前存的JSON数据。
单次打开文件的实现方法
直接用r+模式,补两个指针操作即可,全程不需要重复打开关闭文件,代码如下:
import json with open(shared_file_path, 'r+', encoding='utf-8') as json_file: data = json.load(json_file) if data.get(param) != value: data[param] = value # 将文件指针移回文件起始位置 json_file.seek(0) # 写入更新后的JSON数据 json.dump(data, json_file, ensure_ascii=False, indent=2) # 截断指针当前位置之后的所有残留旧内容,避免格式损坏 json_file.truncate()
补充说明
- 该方案仅适用于单线程/单进程操作JSON配置文件的场景,如果存在多进程并发读写同一个文件的需求,需要额外加文件锁避免读写冲突损坏文件。
- 代码里的
seek(0)和truncate()两个调用缺一不可:少了前者会出现内容追加的问题,少了后者会在新内容短于旧内容时残留无效字符,导致JSON无法正常解析。
内容的提问来源于stack exchange,提问作者R M
相关产品推荐
相关产品推荐

