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

Python 3.6技术问题:如何读取两个文本文件为集合并检查交集

解决两个文本文件找交集的Python方案

嘿,刚接触Python 3.6就能自己琢磨问题思路,已经超棒啦!咱们一步步把这个找交集的问题搞定,既保证正确性,又兼顾效率~

核心思路梳理

其实你的目标很明确:找出输入列表和黑名单里完全相同的行,然后生成新文件。这里关键是两点:

  • 处理每行末尾的换行符(不然"hello\n"和"hello"会被判定为不同)
  • 用高效的方式做存在性检查(避免低效的嵌套循环)

完整代码实现

我把代码拆成几个部分,每部分都给你解释清楚,方便你理解:

1. 读取黑名单并转成集合

# 打开黑名单文件,用集合存储内容(集合的查找速度远快于列表)
with open('blacklist.txt', 'r', encoding='utf-8') as blacklist_file:
    # 用rstrip('\n')只去掉每行末尾的换行符,保留行内的空格等内容
    blacklist_set = {line.rstrip('\n') for line in blacklist_file}

为什么用集合? 因为集合的in操作是O(1)常数时间,而列表的in是O(n)线性时间——如果黑名单有几千上万行,用集合能快好几倍!

2. 遍历输入列表,筛选交集

# 存储找到的交集内容
intersection_lines = []

with open('input_list.txt', 'r', encoding='utf-8') as input_file:
    for line in input_file:
        # 同样清理换行符,保证和黑名单的内容格式一致
        cleaned_line = line.rstrip('\n')
        # 检查当前行是否在黑名单里
        if cleaned_line in blacklist_set:
            intersection_lines.append(cleaned_line)

3. 将交集写入新文件

# 把结果写入新的文本文件
with open('intersection_result.txt', 'w', encoding='utf-8') as result_file:
    for line in intersection_lines:
        # 写入时记得加回换行符,让结果文件的格式和原文件一致
        result_file.write(line + '\n')

新手注意事项

  • 文件路径问题:如果你的文本文件和IDLE当前打开的脚本不在同一个文件夹里,要写完整的文件路径,比如Windows下的C:/Users/你的用户名/Documents/blacklist.txt,或者macOS/Linux下的/Users/你的用户名/Documents/blacklist.txt
  • 编码问题:如果文件里有中文或其他非英文内容,记得加上encoding='utf-8'参数,避免乱码
  • 如果你的原始思路是嵌套循环:比如用两个列表互相遍历查找,这种写法虽然能跑,但效率极低,当文件大的时候会非常慢,换成集合就解决啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:15:14