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

如何提取两个TXT文件中因前缀差异未匹配的缺失相机型号行

相机型号列表差集提取方案

核心逻辑是先对所有型号做标准化处理,消除品牌前缀带来的写法差异,再做集合比对,不要直接用原始文本匹配。

前置准备

先整理你文件中出现过的所有相机品牌前缀,统一为大写形式,常见的参考如下,遇到其他品牌可以自行补充:

  • NIKON
  • CANON
  • SONY
  • FUJIFILM
  • PANASONIC
  • OLYMPUS
  • LEICA
  • PENTAX
  • RICOH

如果存在多词前缀(比如CANON POWERSHOT),直接把完整长前缀加入列表即可,匹配时长前缀放在短前缀前面,避免切分错误。

处理脚本

直接用Python运行即可,不需要安装额外第三方库,把开头的文件路径改成你本地的实际路径:

# 配置项,修改为你的本地文件路径
FILE_A = "camera_list_a.txt"
FILE_B = "camera_list_b.txt"
OUTPUT_ONLY_A = "only_in_a.txt"
OUTPUT_ONLY_B = "only_in_b.txt"

# 补充所有你遇到的品牌/固定前缀,长前缀放前面
PREFIX_LIST = ["CANON POWERSHOT", "NIKON", "CANON", "SONY", "FUJIFILM", "PANASONIC", "OLYMPUS", "LEICA", "PENTAX", "RICOH"]

def normalize_model(line: str) -> str:
    """统一型号格式,消除前缀、大小写、多余空格的差异"""
    text = line.strip().upper()
    if not text:
        return ""
    for prefix in PREFIX_LIST:
        if text.startswith(prefix):
            text = text[len(prefix):].strip()
            break
    return text

def load_model_dict(file_path: str) -> dict:
    model_map = {}
    # 如果你的文件是GBK编码,把下面encoding参数改成gbk
    with open(file_path, "r", encoding="utf-8") as f:
        for line in f:
            raw_content = line.rstrip("\n")
            std_key = normalize_model(raw_content)
            if std_key:
                model_map[std_key] = raw_content
    return model_map

if __name__ == "__main__":
    model_dict_a = load_model_dict(FILE_A)
    model_dict_b = load_model_dict(FILE_B)

    key_set_a = set(model_dict_a.keys())
    key_set_b = set(model_dict_b.keys())

    only_in_a = [model_dict_a[k] for k in key_set_a - key_set_b]
    only_in_b = [model_dict_b[k] for k in key_set_b - key_set_a]

    with open(OUTPUT_ONLY_A, "w", encoding="utf-8") as f:
        f.write("\n".join(only_in_a))
    with open(OUTPUT_ONLY_B, "w", encoding="utf-8") as f:
        f.write("\n".join(only_in_b))
    
    print(f"处理完成:仅在A文件存在的型号共{len(only_in_a)}条,仅在B文件存在的共{len(only_in_b)}条")

匹配效果说明

你提到的几种写法经过标准化后会被识别为同一型号,不会被误判为差异项:

  • 原始值NIKON D610、D610 → 标准化key均为D610
  • 原始值CANON POWERSHOT A1200、POWERSHOT A1200 → 标准化key均为POWERSHOT A1200

如果后续遇到其他写法差异(比如多余的KIT套机后缀、版本号后缀),直接在normalize_model函数里增加对应的字符串裁剪逻辑即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:15:40