如何用Python对比CSV文件两列并找出共同内容?
嘿,我来帮你梳理下问题~你的需求是找出CSV两列所有元素的共同内容,而不是逐行对比两个元素是否相等,这就是现有代码没得到正确结果的原因啦。
问题分析
你现在的代码是逐行检查每行的两个元素是否完全一致,但你实际需要的是把item1列的所有元素和item2列的所有元素放在一起,找出同时出现在两列里的元素——也就是求两个集合的交集。
修正后的代码
先看完整代码,然后我再拆解每一步:
import csv # 初始化两个空集合,用来存储两列的元素 col1 = set() col2 = set() with open('output/id.csv', 'r') as csvfile: csvreader = csv.reader(csvfile) # 跳过表头行(第一行的item1,item2) next(csvreader) # 遍历每一行数据 for line in csvreader: # 把每行的第一列元素加入col1集合,strip()避免空格干扰 col1.add(line[0].strip()) # 把每行的第二列元素加入col2集合 col2.add(line[1].strip()) # 计算两个集合的交集,就是两列的共同内容 common_items = col1 & col2 # 按照你期望的格式输出 print(f"item {' '.join(common_items)}")
代码拆解
- 用集合存储元素:集合的特性是自动去重,而且求交集的效率很高,非常适合做这种元素匹配的需求。
- 跳过表头:用
next(csvreader)跳过第一行的item1,item2,避免把表头也算进元素里。 - strip()处理:防止元素前后有空格(比如你的示例里可能存在的空格),确保匹配准确。
- 求交集:用
col1 & col2就能直接得到同时存在于两列的元素,最后用' '.join()把元素拼成你想要的字符串格式。
测试验证
假设你的CSV内容是:
item1,item2 A,B B,C C,D E,F
运行代码后会输出:item B C,完全符合你的期望~
内容的提问来源于stack exchange,提问作者jan
相关产品推荐
相关产品推荐

