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

如何对比两个文件,找出文件1中未出现在文件2的门店编号?

问题:找出文件1中未出现在文件2的门店编号及联系电话

需求说明

对比两个文件:

  • 文件1包含门店编号和对应联系电话
  • 文件2是过滤后的门店编号列表,部分原门店已缺失
    目标:找出文件1中所有未在文件2里出现的门店完整信息(编号+电话)

文件内容示例

文件1(file_1.txt)

Store: 00377
Main number: 8033056238

Store: 00525
Main number: 4075624470

Store: 00840
Main number: 4782736996

Store: 00920
Main number: 4783337031

Store: 00998
Main number: 9135631751

Store: 02226
Main number: 3107501983

Store: 02328
Main number: 8642148700

Store: 02391
Main number: 7272645342

Store: 02392
Main number: 9417026237

Store: 02393
Main number: 4057942724

文件2(file_2.txt)

00377
00525
00840
00920
00998
02203
02226
02328
02391
02392
02393
02394
02395
02396
02397
02406
02414
02425
02431
02433
02442

原代码问题分析

原代码逻辑完全错误:

  1. 嵌套循环遍历两行文件的每一行,只要文件2的行不在文件1的行里就打印,导致重复输出所有门店
  2. 没处理readlines()保留的换行符,导致编号匹配失败
  3. 没有从文件1的行中提取出门店编号,直接拿整行对比
  4. 手动调用close()多余,with语句会自动关闭文件

修正后的代码

实现思路

  1. 先读取文件2的门店编号,存入集合(查找效率远高于列表),同时去掉换行符
  2. 读取文件1内容,按门店分组提取编号和电话
  3. 逐个检查文件1的门店编号是否不在文件2的集合中,符合条件就输出或存入列表

代码实现

def find_missing_stores():
    # 读取文件2,提取门店编号到集合
    with open("file_2.txt", "r") as f2:
        store_set = {line.strip() for line in f2 if line.strip()}  # 过滤空行和换行符

    # 读取文件1,提取门店信息并筛选缺失项
    missing_stores = []
    with open("file_1.txt", "r") as f1:
        # 过滤空行和换行符,得到有效内容行
        valid_lines = [line.strip() for line in f1 if line.strip()]
        # 每两行对应一个门店的编号+电话
        for i in range(0, len(valid_lines), 2):
            store_id = valid_lines[i].split("Store: ")[1]
            phone = valid_lines[i+1].split("Main number: ")[1]
            
            if store_id not in store_set:
                missing_info = {"门店编号": store_id, "联系电话": phone}
                missing_stores.append(missing_info)
                print(f"缺失门店:{store_id},联系电话:{phone}")
    
    return missing_stores

# 执行函数
find_missing_stores()

代码说明

  • 用集合存文件2的编号:in操作时间复杂度O(1),比列表的O(n)快很多
  • 处理文件时过滤空行和换行符,避免格式问题导致匹配失败
  • 按每两行一组提取信息,确保编号和电话对应正确
  • 结果存入列表missing_stores,方便后续批量处理;同时直接打印结果

测试结果

针对给定的示例文件,文件1的所有门店编号都在文件2中存在,所以不会输出内容。如果修改文件2删除某个编号(比如00377),则会输出:

缺失门店:00377,联系电话:8033056238

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:25:09