使用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
相关产品推荐
相关产品推荐

