如何对比两个文件,找出文件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
原代码问题分析
原代码逻辑完全错误:
- 嵌套循环遍历两行文件的每一行,只要文件2的行不在文件1的行里就打印,导致重复输出所有门店
- 没处理
readlines()保留的换行符,导致编号匹配失败 - 没有从文件1的行中提取出门店编号,直接拿整行对比
- 手动调用
close()多余,with语句会自动关闭文件
修正后的代码
实现思路
- 先读取文件2的门店编号,存入集合(查找效率远高于列表),同时去掉换行符
- 读取文件1内容,按门店分组提取编号和电话
- 逐个检查文件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
相关产品推荐
相关产品推荐

