如何批量转换目录及子目录下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
相关产品推荐
相关产品推荐

