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

合并目录中所有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:13:22