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

如何从多个存在细微差异的重复JSON文件中删除指定文本块

解决方案

优先使用JSON结构化解析实现,比正则匹配更稳定,不会因为文本缩进、换行、字段顺序变化导致匹配失效,同时天然适配FindMe字段URL不同的场景,直接通过Animal.Type_species的值判断是否需要删除即可。

Python 实现脚本

import json
import os
import shutil

# -------------------------- 配置项 --------------------------
# 存放待处理JSON文件的文件夹路径
JSON_DIR = "./your_json_files"
# 是否备份原文件(建议开启,防止误删)
BACKUP_ORIGIN = True
# 删除条件:满足该条件的块会被删除
def is_should_delete(item):
    # 只要Animal下的Type_species为Mammal就删除,无视FindMe字段内容
    return item.get("Animal", {}).get("Type_species") == "Mammal"
# -----------------------------------------------------------

def process_single_file(file_path):
    # 读取原文件
    with open(file_path, "r", encoding="utf-8") as f:
        try:
            data = json.load(f)
        except json.JSONDecodeError as e:
            print(f"文件 {file_path} 格式错误,跳过处理:{e}")
            return
    
    # 过滤数据:仅保留不需要删除的块
    if isinstance(data, list):
        filtered_data = [item for item in data if not is_should_delete(item)]
    else:
        # 如果你的JSON外层不是数组,可自行调整此处逻辑,例如如果外层是{"list": [xxx]}则写:
        # filtered_data = data
        # filtered_data["list"] = [item for item in data["list"] if not is_should_delete(item)]
        print(f"文件 {file_path} 顶层不是数组,跳过处理")
        return
    
    # 备份原文件
    if BACKUP_ORIGIN:
        shutil.copy(file_path, f"{file_path}.bak")
    
    # 写入处理后的数据
    with open(file_path, "w", encoding="utf-8") as f:
        json.dump(filtered_data, f, indent=2, ensure_ascii=False)
    print(f"处理完成:{file_path}")

if __name__ == "__main__":
    for filename in os.listdir(JSON_DIR):
        if filename.endswith(".json"):
            full_path = os.path.join(JSON_DIR, filename)
            if os.path.isfile(full_path):
                process_single_file(full_path)
    print("所有文件处理完毕")

使用说明

  1. 把所有待处理的JSON文件放到同一个文件夹内
  2. 修改脚本中JSON_DIR的配置为你的文件夹路径
  3. 确认删除条件:默认只要Type_species等于Mammal就删除,符合你提出的两个需求,不管FindMe的URL是什么都会匹配
  4. 运行脚本即可,开启备份的情况下原文件会保留为.bak后缀的文件,确认处理无误可自行删除备份

特殊场景适配

如果你的JSON文件存在语法问题无法正常解析,可以使用以下简化的文本处理脚本(仅适配你给出的固定格式场景):

import re
import os

JSON_DIR = "./your_json_files"
BACKUP_ORIGIN = True

# 匹配Mammal对应的块的正则
pattern = re.compile(r'\{\s*"Animal":\s*\{\s*"Type_species":\s*"Mammal"\s*},.*?},', re.DOTALL)

for filename in os.listdir(JSON_DIR):
    if filename.endswith(".json"):
        full_path = os.path.join(JSON_DIR, filename)
        with open(full_path, "r", encoding="utf-8") as f:
            content = f.read()
        new_content = pattern.sub("", content)
        if BACKUP_ORIGIN:
            with open(f"{full_path}.bak", "w", encoding="utf-8") as f:
                f.write(content)
        with open(full_path, "w", encoding="utf-8") as f:
            f.write(new_content)

内容的提问来源于stack exchange,提问作者A. H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:54:03