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

使用multiprocessing.Pool加载同文件夹多CSV文件合并报错排查

问题原因

你遇到的TypeError是因为pool.map的工作方式导致的:

  • zip(repeat(file_folder), file_list)生成的是一系列元组,每个元组格式为(文件夹路径, 文件名)
  • pool.map会把每个元组作为单个完整参数传给read_csv_helper,而不是将元组里的两个元素分别传给file_folder和filename参数
  • 这就导致read_csv_helper中的file_folder变量接收到的是元组,filename是默认的空字符串,执行file_folder + filename时就变成了「元组 + 字符串」的非法操作,触发错误。
解决方案

有两种简单的修复方式:

方法1:使用pool.starmap替代pool.map

starmap会自动将元组中的元素拆分,分别传给函数的多个参数,这是最贴合你原有代码逻辑的改法:

from multiprocessing import Pool 
from itertools import repeat
import pandas as pd

def read_csv_helper(file_folder='', filename=''):
    return pd.read_csv(file_folder + filename)

def load_all_files(file_folder, file_list):
    pool = Pool()
    # 把map改成starmap
    df_list = pool.starmap(read_csv_helper, zip(repeat(file_folder), file_list))
    return pd.concat(df_list, ignore_index=True)

方法2:调整辅助函数的参数格式

让read_csv_helper接受单个元组参数,手动拆包:

from multiprocessing import Pool 
from itertools import repeat
import pandas as pd

def read_csv_helper(args):
    # 手动拆分元组为两个参数
    file_folder, filename = args
    return pd.read_csv(file_folder + filename)

def load_all_files(file_folder, file_list):
    pool = Pool()
    df_list = pool.map(read_csv_helper, zip(repeat(file_folder), file_list))
    return pd.concat(df_list, ignore_index=True)
额外建议

拼接文件路径时,推荐使用os.path.join()替代字符串拼接,它会自动处理文件夹路径末尾的斜杠问题,避免出现无效路径:

import os

def read_csv_helper(file_folder='', filename=''):
    return pd.read_csv(os.path.join(file_folder, filename))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:25:48