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

如何修正代码以从JSON文件中删除Proc为APS的指定条目?

如何修正Python代码删除JSON中指定条目?

你的代码没生效主要有两个原因:一是遍历列表时直接删除循环变量item并不会修改原列表,二是r+模式下直接写入会导致内容追加而非覆盖。下面给你两种可行的修正方案:

方案一:列表推导式过滤(推荐)

这种方式最简洁易读,先读取JSON内容,过滤掉不需要的条目后再覆盖写入文件:

import json

# 读取原JSON文件内容
with open('E:/file/timings.json', 'r', encoding='utf-8') as f:
    qe = json.load(f)

# 过滤掉Proc为"APS"的条目,生成新的times列表
qe['times'] = [item for item in qe['times'] if item['Proc'] != 'APS']

# 将处理后的内容写入文件,覆盖原内容
with open('E:/file/timings.json', 'w', encoding='utf-8') as f:
    json.dump(qe, f, indent=4, sort_keys=False, ensure_ascii=False)

为什么这个方案有效?

  • 列表推导式直接生成了不包含Proc="APS"的新列表,替换掉原有的qe['times'],从根源上修改了数据结构。
  • 分开使用r和w模式:r只读读取内容,w模式会清空原文件再写入新内容,避免了文件指针位置导致的追加问题。

方案二:反向遍历删除元素(适合需要保留原列表修改逻辑的场景)

如果你一定要通过遍历删除元素,需要反向遍历列表(避免正向删除时索引错位),同时调整文件操作的方式:

import json

with open('E:/file/timings.json', 'r+', encoding='utf-8') as f:
    qe = json.load(f)
    # 从后往前遍历列表索引,防止删除元素后后续元素前移导致漏处理
    for i in range(len(qe['times'])-1, -1, -1):
        item = qe['times'][i]
        if item['Proc'] == 'APS':
            print(f'{item["Num"]}')
            del qe['times'][i]
    # 将文件指针移到文件开头,截断原有内容,再写入新数据
    f.seek(0)
    f.truncate()
    json.dump(qe, f, indent=4, sort_keys=False, ensure_ascii=False)

原代码的问题拆解

  1. del item无效:item只是循环中的临时变量,删除它不会影响原列表qe['times']中的元素,原列表根本没被修改。
  2. r+模式写入问题:读取完文件后,文件指针停在文件末尾,直接json.dump会把新内容追加到原文件后面,而不是覆盖,导致原内容还留在文件里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:12:14