
本文介绍使用 Python 批量读取指定目录中所有 .xlsx 文件,并自动将其转换为同名 .csv 文件,存入子目录,全程无需硬编码文件名或路径。
本文介绍使用 python 批量读取指定目录中所有 `.xlsx` 文件,并自动将其转换为同名 `.csv` 文件,存入子目录,全程无需硬编码文件名或路径。
在实际数据处理场景中,常需将用户上传的多个 Excel 文件统一转为 CSV 格式以便后续分析或入库。手动逐个修改文件名不仅低效,还易出错。以下是一个健壮、可复用的自动化方案:
诊断并修复涉及公式、命名范围、Power Query 刷新、数据透视表、VBA/宏保存等问题的 Microsoft Excel XLSX 工作簿
✅ 核心思路
- 使用 os.listdir() 列出源目录下所有文件;
- 通过 str.endswith(".xlsx") 筛选出 Excel 文件;
- 利用 os.path.join() 构建跨平台安全的文件路径;
- 用 os.path.splitext(filename)[0] 提取不带扩展名的文件基础名,确保 CSV 文件名与原 Excel 一致;
- 自动创建输出子目录(如不存在),提升脚本鲁棒性。
? 完整可运行代码
import os
import pandas as pd
# ✅ 配置路径(可根据实际环境修改)
source_directory = "/input_files/"
output_directory = os.path.join(source_directory, "input_csv_files")
# ✅ 确保输出目录存在
os.makedirs(output_directory, exist_ok=True)
# ✅ 获取所有 .xlsx 文件(忽略大小写更稳妥,见下方增强建议)
all_files = [f for f in os.listdir(source_directory) if f.lower().endswith(".xlsx")]
print(f"发现 {len(all_files)} 个 Excel 文件待转换:{all_files}")
for filename in all_files:
# 构建完整输入路径
input_filepath = os.path.join(source_directory, filename)
try:
# 读取 Excel(支持多 sheet,默认读取第一个)
df = pd.read_excel(input_filepath)
# 构建输出路径:test1.xlsx → test1.csv
base_name = os.path.splitext(filename)[0]
output_filepath = os.path.join(output_directory, base_name + ".csv")
# 写入 CSV,禁用索引,保留表头
df.to_csv(output_filepath, index=False, header=True)
print(f"✅ 已成功转换:{filename} → {os.path.basename(output_filepath)}")
except Exception as e:
print(f"❌ 转换失败 {filename}:{e}")
⚠️ 注意事项与增强建议
- 路径安全性:避免直接拼接字符串(如 file_path + "test1.xlsx"),始终使用 os.path.join() 或 pathlib.Path(推荐 Python 3.4+);
- 大小写兼容:Windows 不区分文件名大小写,但 Linux 区分;使用 f.lower().endswith(".xlsx") 更可靠;
- 错误处理:添加 try...except 捕获读取失败(如损坏文件、密码保护表等),避免单个错误中断全部流程;
- 性能优化:若文件极大,可考虑使用 chunksize 参数分块读取(适用于 .csv 输出场景有限,Excel 原生不支持分块读取,但 openpyxl 可配合迭代);
- 进阶扩展:可加入日志记录、文件哈希校验、时间戳命名、或支持 .xls/.xlsm 等格式。
该方案简洁清晰、符合 Python 最佳实践,开箱即用,也易于集成到定时任务或 Web 后端(如 Flask/FastAPI)中实现自动化文件预处理流水线。










