如何用Python提取文件1中不在文件2的邮箱并存入列表?
解决方法
优先推荐用集合处理这类存在性判断问题,效率远高于循环遍历,同时用with语句管理文件能自动释放资源,不用手动调用close:
# 读取accounts.txt的所有非空邮箱到集合(集合查找效率远高于列表) with open("accounts.txt", "r") as file2: accounts_set = {line.strip() for line in file2 if line.strip()} # 筛选competitor_accounts.txt中不在accounts_set里的邮箱 unique_competitor_emails = [] with open("competitor_accounts.txt", "r") as file1: for line in file1: email = line.strip() # 跳过空行,只保留不在目标集合里的邮箱 if email and email not in accounts_set: unique_competitor_emails.append(email) # 最终结果列表 print(unique_competitor_emails)
步骤说明
- 先用集合推导式把
accounts.txt里的有效邮箱存入集合,集合的in操作时间复杂度是O(1),数据量大时比列表的O(n)快很多 - 逐行读取
competitor_accounts.txt,处理掉每行的换行符和前后空白,判断邮箱是否不在目标集合中,符合条件就加入结果列表 - 如果你的文件里存在重复邮箱,还可以给结果列表去重:
unique_competitor_emails = list(set(unique_competitor_emails))
如果坚持用你最初考虑的for循环+if方案(适合数据量小的场景),可以这么写:
# 读取file2的邮箱到列表 file2 = open("accounts.txt") accounts_list = [line.strip() for line in file2 if line.strip()] file2.close() # 遍历file1筛选目标邮箱 unique_competitor_emails = [] file1 = open("competitor_accounts.txt") for line in file1: email = line.strip() if email and email not in accounts_list: unique_competitor_emails.append(email) file1.close() print(unique_competitor_emails)
内容的提问来源于stack exchange,提问作者justTrying
相关产品推荐
相关产品推荐

