C# 比对两个CSV国家列输出差集到新CSV的实现方案
两个CSV国家列差异提取实现方案
列表筛选核心代码
你需要的列表逻辑筛选写法非常简单,直接用列表推导式即可实现:
# 假设list1是第一个CSV的国家列值列表,list2是第二个CSV的国家列值列表 unique_countries = [country for country in list1 if country not in list2]
如果两个CSV的国家数据量较大,建议将第二个列表转为集合优化查询效率,最终输出仍然是列表,不影响后续写入逻辑:
set2 = set(list2) unique_countries = [country for country in list1 if country not in set2]
完整实现示例(Python内置csv模块,无需第三方依赖)
全程用列表存储国家数据,符合你的使用习惯:
import csv # 配置参数:修改为你的实际文件路径和国家列名 csv1_path = "first.csv" csv2_path = "second.csv" output_path = "unique_countries.csv" country_col_name = "国家" # 读取第一个CSV的国家列到列表 list1 = [] with open(csv1_path, encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: list1.append(row[country_col_name].strip()) # strip去除首尾空格避免匹配误差 # 读取第二个CSV的国家列到列表 list2 = [] with open(csv2_path, encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: list2.append(row[country_col_name].strip()) # 筛选第一个列表独有的国家 unique_countries = [country for country in list1 if country not in list2] # 可选去重:如果第一个CSV里有重复国家,可取消注释下面这行 # unique_countries = list(dict.fromkeys(unique_countries)) # 写入结果到第三个CSV with open(output_path, "w", encoding="utf-8", newline="") as f: writer = csv.writer(f) writer.writerow([country_col_name]) # 写入表头 for country in unique_countries: writer.writerow([country])
可选简化方案(pandas实现)
如果允许使用第三方库,pandas可以更简单实现同样逻辑:
import pandas as pd df1 = pd.read_csv("first.csv") df2 = pd.read_csv("second.csv") # 筛选df1中不在df2国家列的条目 unique_df = df1[~df1["国家"].isin(df2["国家"])][["国家"]] # 可选去重:unique_df = unique_df.drop_duplicates() unique_df.to_csv("unique_countries.csv", index=False)
内容的提问来源于stack exchange,提问作者Máté Potyesz
相关产品推荐
相关产品推荐

