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

如何用Python从文件A提取Query值并在大文件B中查重?

解决方案:精准匹配两个文件中的Query字段并输出结果

你的原代码直接判断整个File A内容是否在File B中,无法实现精准匹配单个条目的Query字段,也没法关联对应的ID。以下是可行的实现方案:

核心思路

  • 先处理大文件File B,提取所有Query字段的值存入集合(集合查找效率为O(1),适合大文件场景)
  • 处理File A,逐个提取每个条目的ID和Query值,检查该Query是否存在于File B的集合中,存在则输出指定提示

代码实现

针对两个文件中无逗号分隔的连续JSON对象格式,我们用正则匹配拆分每个独立JSON对象,再解析处理:

import re
import json

# 第一步:提取File B中所有Query值,存入集合
file_b_queries = set()
with open('FileB', 'r') as f2:
    content = f2.read()
    # 跳过开头的文件头,提取后续JSON内容
    json_part = content.split(']')[1] if '[' in content else content
    # 匹配每个独立的JSON对象
    json_objects = re.findall(r'\{.*?\}', json_part, re.DOTALL)
    for obj_str in json_objects:
        try:
            obj = json.loads(obj_str)
            if 'Query' in obj:
                file_b_queries.add(obj['Query'])
        except json.JSONDecodeError:
            # 跳过解析失败的不规范JSON
            continue

# 第二步:处理File A,检查每个条目
with open('FileA', 'r') as f1:
    content = f1.read()
    json_objects = re.findall(r'\{.*?\}', content, re.DOTALL)
    for obj_str in json_objects:
        try:
            obj = json.loads(obj_str)
            entry_id = obj.get('ID', 'Unknown')
            query_val = obj.get('Query')
            if query_val and query_val in file_b_queries:
                print(f"Entry ID {entry_id} already exist in File B!")
            else:
                print(f"Importing entry {entry_id}....")
        except json.JSONDecodeError:
            continue

关键细节说明

  • 正则匹配JSON对象:re.findall(r'\{.*?\}', content, re.DOTALL)用于匹配所有{}包裹的JSON片段,re.DOTALL确保匹配包含换行的JSON对象
  • File B头部处理:通过split(']')[1]跳过开头的[_some fileheader info],如果文件头格式不同,可调整此逻辑
  • 集合存储优化:用集合存储Query值,既避免重复数据,又大幅提升大文件的查找效率
  • 错误容错:加入try-except捕获JSON解析错误,避免因文件中存在不规范JSON导致程序崩溃

测试结果

用你提供的示例文件运行代码,会输出:

Entry ID 01 already exist in File B!
Importing entry 02....

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:27:25