Python实现两个CSV文件交叉引用并移除黑名单店铺
解决CSV主列表过滤黑名单店铺的Python方案
嘿,折腾两天没搞定确实闹心,我给你整理了两种靠谱的Python实现方案,你可以根据自己的需求选:
方法一:使用Python标准库csv(无需额外安装依赖)
这个方法适合不想装第三方库的场景,用Python自带的csv模块就能轻松搞定:
import csv # 1. 读取黑名单店铺,存入集合(集合查找速度远快于列表,效率更高) blacklist = set() with open('黑名单店铺列表.csv', 'r', encoding='utf-8') as black_file: reader = csv.DictReader(black_file) for row in reader: # 假设黑名单里的店铺名列是"店铺名称",如果不是请修改这里 blacklist.add(row['店铺名称'].strip()) # strip()去除前后空格,避免匹配误差 # 2. 读取主店铺列表,过滤掉黑名单中的店铺 filtered_rows = [] with open('店铺名称列表.csv', 'r', encoding='utf-8') as main_file: reader = csv.DictReader(main_file) # 先保留表头 filtered_rows.append(reader.fieldnames) for row in reader: shop_name = row['店铺名称'].strip() if shop_name not in blacklist: filtered_rows.append(row) # 3. 将过滤后的结果写入新文件(建议不要直接覆盖原文件,先备份) with open('过滤后店铺列表.csv', 'w', encoding='utf-8', newline='') as output_file: writer = csv.DictWriter(output_file, fieldnames=filtered_rows[0]) writer.writeheader() writer.writerows(filtered_rows[1:]) print("过滤完成!结果已保存到'过滤后店铺列表.csv'")
方法二:使用pandas(代码更简洁,适合处理大文件)
如果你已经装了pandas,这个方法会更高效,代码也短很多:
import pandas as pd # 读取两个CSV文件 df_main = pd.read_csv('店铺名称列表.csv', encoding='utf-8') df_blacklist = pd.read_csv('黑名单店铺列表.csv', encoding='utf-8') # 获取黑名单店铺集合 blacklist_set = set(df_blacklist['店铺名称'].str.strip()) # 过滤主列表:保留不在黑名单中的店铺(~表示取反) df_filtered = df_main[~df_main['店铺名称'].str.strip().isin(blacklist_set)] # 保存过滤后的结果,index=False是为了不生成默认索引列 df_filtered.to_csv('过滤后店铺列表.csv', index=False, encoding='utf-8') print("过滤完成!结果已保存到'过滤后店铺列表.csv'")
关键注意事项
- 列名匹配:我默认两个CSV的店铺名称列都叫
店铺名称,如果你的列名是别的(比如“店名”“商铺名称”),一定要把代码里的对应字段改成你实际的列名! - 编码问题:如果你的CSV是用GBK编码保存的,记得把
encoding='utf-8'改成encoding='gbk',避免出现乱码。 - 数据备份:建议不要直接覆盖原主列表文件,先写新文件确认没问题后再替换,防止误操作丢失数据。
- 空格处理:用
strip()去除店铺名称前后的空格,避免因为多打了空格导致匹配失败(比如“ 张三超市 ”和“张三超市”会被当成不同的店铺)。
内容的提问来源于stack exchange,提问作者Damon Percival
相关产品推荐
相关产品推荐

