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

Python使用列表推导删除JSON用户条目后文件出现冗余内容如何解决

问题原因

这是r+文件操作模式的特性导致的:r+模式下写入新内容时,仅会覆盖和新内容长度匹配的原有文件区域,若修改后要写入的新内容长度短于原文件的总长度,原文件末尾超出新内容长度的旧内容不会被自动清除,就会出现你看到的尾部残留旧JSON片段、格式损坏的问题。

解决方法

方案1:写入后截断文件(修改量最小)

在你现有代码的json.dump操作后,新增一行truncate()调用,直接删除文件指针之后所有的多余内容即可,修改后的代码如下:

import json

def removeUserFunc(SID):
    print(SID.get())
    with open('Credentials.json','r+') as json_file:
        data = json.load(json_file)
        data['Credentials'] = [item for item in data['Credentials'] if item['username'] != SID.get()]
        json_file.seek(0)
        json.dump(data, json_file, indent=3, sort_keys=True)
        # 新增此行,截断指针后所有多余内容
        json_file.truncate()

方案2:拆分读写操作(更稳妥)

直接将读文件和写文件拆分为两个独立的操作,写入时使用w模式,该模式会自动清空原文件所有内容再写入新内容,从根源上避免残留问题:

import json

def removeUserFunc(SID):
    target_sid = SID.get()
    print(target_sid)
    # 只读模式读取原文件内容
    with open('Credentials.json', 'r') as f:
        data = json.load(f)
    # 过滤目标用户
    data['Credentials'] = [item for item in data['Credentials'] if item['username'] != target_sid]
    # 写入模式打开,自动清空原内容后写入新数据
    with open('Credentials.json', 'w') as f:
        json.dump(data, f, indent=3, sort_keys=True)

内容的提问来源于stack exchange,提问作者kogam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:06:03