Python匹配两文件邮箱字段新增位置列解决重复输出问题
问题原因
你当前代码的重复输出问题来自逻辑错误:对每一条凭证记录,都会遍历整个所在地文件的所有行,每遍历一行所在地记录就输出一次结果,所在地文件有多少行,每条凭证就会对应输出多少次,最终产生大量重复行。
修复方案
调整逻辑,先将所有邮箱和所在地的映射关系存入字典,再遍历凭证文件做匹配,每条凭证仅输出一次结果:
# 先读取所在地信息存入字典,避免重复遍历文件 location_map = {} with open("location.txt", "r", encoding="utf-8") as b_file: for line in b_file: line = line.strip() if not line: continue email, loc = line.split(":", 1) location_map[email] = loc # 遍历凭证文件做匹配 with open("test.txt", "r", encoding="utf-8") as a_file: for line in a_file: line = line.strip() if not line: continue email, credential = line.split(":", 1) # 查找所在地,找不到默认返回BLANK loc = location_map.get(email, "BLANK") print(f"{email}:{credential}:{loc}")
修改说明
- 仅需读取一次所在地文件,映射存入字典后查询效率为O(1),相比原逻辑重复打开遍历文件性能提升明显
- 每条凭证记录仅做一次查询、一次输出,从根源解决重复行问题
- 增加空行跳过逻辑,避免文件存在空行时触发索引错误
split指定最大分割次数为1,避免凭证、所在地字段本身包含冒号时拆分出错
内容的提问来源于stack exchange,提问作者aDoN
相关产品推荐
相关产品推荐

