合并目录中所有xlsx文件的Python脚本报错,求解决方法
解决合并XLSX文件脚本的报错问题
首先看你遇到的报错:
TypeError: can only concatenate list (not "str") to list
这个错误的根源是**os.listdir(cwd)返回的是一个文件名列表**,你试图把这个列表和字符串.xlsx拼接(f+".xlsx"),这在Python里是不允许的——列表只能和列表拼接,不能直接加字符串。
另外你的脚本还有几个其他小问题:
- 变量
all_data没有提前初始化就直接调用append方法 - 混淆了
append和concat的用法,逻辑有点混乱 - 保存为
.xlsb格式需要额外依赖,原代码的写法也存在小瑕疵
下面是修正后的完整脚本,我标注了关键修改点:
import glob import pandas as pd # 目标文件目录 cwd = "C:/Users/alexl/Documents/ST/Results/" # 直接用glob匹配目录下所有xlsx文件,这才是正确的批量匹配方式 all_data = [] for file_path in glob.glob(f"{cwd}*.xlsx"): # 读取单个Excel文件 df = pd.read_excel(file_path) # 将读取到的DataFrame存入列表 all_data.append(df) # 一次性合并所有DataFrame,效率比循环append更高 merged_df = pd.concat(all_data, ignore_index=True) # 保存合并后的文件,这里默认用更通用的xlsx格式 with pd.ExcelWriter("Merged.xlsx", engine="openpyxl") as writer: merged_df.to_excel(writer, sheet_name="Sheet1", index=False) # 如果确实需要保存为xlsb格式,先执行pip install pyxlsb安装依赖,再用下面这段代码: # import pyxlsb # with pd.ExcelWriter("Merged.xlsb", engine="pyxlsb") as writer: # merged_df.to_excel(writer, sheet_name="Sheet1", index=False)
关键修改说明:
- 替换
os.listdir为glob.glob(f"{cwd}*.xlsx"):直接匹配目标目录下所有.xlsx文件,返回完整文件路径,彻底避免列表与字符串拼接的错误 - 初始化
all_data为列表:用于存储每个读取的DataFrame,之后用pd.concat一次性合并,比循环调用append效率更高 - 使用
with语句管理ExcelWriter:自动处理文件的打开和关闭,代码更安全简洁 - 添加
index=False:避免保存时把DataFrame的索引写入Excel,更符合常规需求 - 补充了xlsb格式的依赖说明:pandas默认不支持xlsb格式,需要额外安装
pyxlsb库才能正常保存
这样修改后,脚本应该能正常运行,顺利合并目录下所有xlsx文件到单个文件中。
内容的提问来源于stack exchange,提问作者 A. Lim
相关产品推荐
相关产品推荐

