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

如何批量转换目录及子目录下xls为xlsx并合并,解决代码报错

报错原因

你代码中filepath是pathlib.Path类型的对象,不支持直接和字符串做+拼接操作,触发类型错误。

修复后完整代码
import pathlib
import pandas as pd
from typing import List

def find_excel_files_in(directory:pathlib.Path) -> List[pathlib.Path]:
    files:List[pathlib.Path] = list()
    # 同时匹配大小写的.xls后缀,避免漏扫文件
    for ext in ('*.xls', '*.XLS'):
        for filepath in directory.rglob(ext):
            if filepath.is_file():
                files.append(filepath)
    return files

# 待扫描目录列表,可按需求新增多个目录
directories:List[str] = ['C:/Users/lwsee/Documents/08. Data/']
                         
found_files:List[pathlib.Path] = list()
# 存储所有读取的表格数据,用于后续合并
all_df = []

for directory in directories:
    directory:pathlib.Path = pathlib.Path(directory)
    found_files.extend(find_excel_files_in(directory))

for filepath in found_files:
    print(f"处理文件:{filepath}")
    # 读取xls文件,如有多工作表需求可调整sheet_name参数
    df = pd.read_excel(filepath)
    # 用Path对象自带方法修改后缀为.xlsx,自动适配系统路径格式
    new_filepath = filepath.with_suffix('.xlsx')
    # 导出为xlsx格式
    df.to_excel(new_filepath, index=False)
    # 将当前表格加入合并列表
    all_df.append(df)

# 合并所有表格,ignore_index=True表示重置总表行号
merged_df = pd.concat(all_df, ignore_index=True)
# 导出合并后的总文件,保存路径可自行修改
merged_df.to_excel('C:/Users/lwsee/Documents/08. Data/合并总表.xlsx', index=False)
关键修改说明
  • 用pathlib.Path自带的with_suffix()方法修改文件后缀,完全避免类型不匹配的报错
  • 新增了对大写.XLS后缀的匹配规则,避免漏掉大小写不统一的文件
  • 新增表格合并逻辑:所有xls文件读取后先存入列表,全部转换完成后用pd.concat合并为一个总表导出
注意事项
  • 如果xls文件包含多个工作表,需要修改pd.read_excel的sheet_name参数指定读取的工作表
  • 如果不同xls文件的表头结构不一致,可以根据需求调整pd.concat的拼接参数
  • 如果运行提示缺少依赖,先执行pip install pandas openpyxl xlrd安装所需库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:51:00