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

对比多份CSV文件与主文件,保留匹配值最多文件的技术问题

保留与主CSV匹配数最多的文件(删除其余文件)

问题分析

你当前的代码仅能计算并打印每个CSV文件与主文件的values列匹配数,但缺少记录匹配数与文件对应关系、筛选最大值文件、删除其余文件的逻辑。另外原匹配数计算方式可以优化,提升大文件处理效率。

解决方案

我们需要:

  1. 用集合存储主文件的values值,快速统计子文件的匹配数(比concat+duplicated高效得多)
  2. 记录每个文件的路径和对应的匹配数
  3. 找到匹配数最大的文件(支持多个文件同最大值的情况)
  4. 删除所有非最大匹配的文件

修改后的完整代码

import pandas as pd
import glob
import os

# 读取主文件并提取values列到集合(去重+快速匹配)
data0 = pd.read_csv('input_path/master_file.csv', sep=',')
master_values = set(data0['values'].dropna())  # 去除空值避免无效匹配

# 获取所有待对比的CSV文件路径
csv_files = glob.glob(fr'path_to_files_in_comparison\**\*.csv', recursive=True)

# 存储每个文件的匹配数和路径
file_matches = []

for file_path in csv_files:
    df_base = os.path.basename(file_path)
    input_dir = os.path.dirname(file_path)
    
    # 读取子文件并计算匹配数
    data1 = pd.read_csv(file_path, sep=',')
    # 统计子文件中values存在于主文件的数量
    match_count = data1['values'].dropna().isin(master_values).sum()
    
    print(f'Matches between {df_base} & {input_dir}: {match_count}')
    file_matches.append((match_count, file_path))

# 处理匹配数最大值逻辑
if not file_matches:
    print("未找到待对比的CSV文件")
else:
    # 获取最大匹配数
    max_count = max(file_matches, key=lambda x: x[0])[0]
    # 收集所有匹配数等于最大值的文件
    max_match_files = [fp for cnt, fp in file_matches if cnt == max_count]
    
    # 保留最大匹配文件,删除其他
    for file_path in csv_files:
        if file_path not in max_match_files:
            os.remove(file_path)
            print(f"已删除文件: {file_path}")
    
    # 输出结果
    if len(max_match_files) == 1:
        print(f"\n保留匹配数最多的文件: {max_match_files[0]},匹配数: {max_count}")
    else:
        print(f"\n发现{len(max_match_files)}个文件匹配数同为最大值({max_count}),已保留以下文件:")
        for fp in max_match_files:
            print(fp)

关键优化点

  • 用集合替代concat+duplicated的方式计算匹配数,时间复杂度从O(n+m)降到O(1)级别的查找,处理大文件时性能提升明显
  • 避免使用内置函数名sum作为变量名,防止覆盖内置函数
  • 支持多个文件匹配数同为最大值的场景,避免误删

内容的提问来源于stack exchange,提问作者P.K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:40:37