You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:06:26