Python实现无硬编码文件名/路径批量转换Excel为CSV文件
问题
我是Python新手,现在需要解决批量转换Excel文件的问题:用户上传的文件都存在/input_files目录下,里面有test1.xlsx、test2.xlsx等多个Excel文件。我已经能实现单个文件的转换(代码如下),但想去掉硬编码的文件名,实现自动读取所有.xlsx文件并批量转换成对应的CSV文件,输出到/input_files/input_csv_files目录下。
原始单文件转换代码:
import pandas as pd file_path = "/Users/input_files/" read_file = pd.read_excel(file_path + "test1.xlsx") read_file.to_csv(file_path + "input_csv_files/test1.csv", index = None, header = True)
期望效果:
/input_files/test1.xlsx→/input_files/input_csv_files/test1.csv/input_files/test2.xlsx→/input_files/input_csv_files/test2.csv- ……以此类推
解决方案
可以借助os模块遍历目标目录下的所有.xlsx文件,结合pandas完成批量转换。同时要提前确保输出目录存在,避免报错。修改后的代码如下:
import pandas as pd import os # 输入目录(根据实际路径调整) input_dir = "/input_files" # 输出目录 output_dir = os.path.join(input_dir, "input_csv_files") # 确保输出目录存在,不存在则自动创建 os.makedirs(output_dir, exist_ok=True) # 遍历输入目录下的所有文件 for filename in os.listdir(input_dir): # 只处理后缀为.xlsx的文件 if filename.endswith(".xlsx"): # 拼接完整的Excel文件路径 excel_full_path = os.path.join(input_dir, filename) # 生成对应的CSV文件名(替换后缀为.csv) csv_filename = os.path.splitext(filename)[0] + ".csv" csv_full_path = os.path.join(output_dir, csv_filename) # 读取Excel并保存为CSV df = pd.read_excel(excel_full_path) df.to_csv(csv_full_path, index=None, header=True) print(f"转换完成:{excel_full_path} → {csv_full_path}")
核心要点说明
- 用
os.listdir()遍历目录文件,通过endswith(".xlsx")精准筛选目标文件 os.path.splitext(filename)[0]提取不带后缀的文件名,方便生成对应的CSV文件名os.makedirs(..., exist_ok=True)确保输出目录存在,即使目录已存在也不会抛出异常- 使用
os.path.join()拼接路径,避免手动拼接字符串时出现路径分隔符(Windows/Linux差异)的问题
内容的提问来源于stack exchange,提问作者sayakgt
相关产品推荐
相关产品推荐

