如何用pyexcel将文件夹中CSV文件批量转为同名XLSX文件?
解决CSV转XLSX时保留原文件名的问题
我帮你调整了代码,现在转换后的XLSX文件会和原CSV文件同名(仅后缀替换为.xlsx)。你原来的代码逻辑有误——每次循环都用merge_all_to_a_book处理所有CSV文件,还靠自增数字生成文件名,这显然不是逐个转换的正确方式。
修改后的完整代码
from pyexcel.cookbook import merge_all_to_a_book import pyexcel.ext.xlsx import glob import os # 切换到存放CSV文件的目标文件夹 os.chdir("/Users/vanicek/Desktop/csv2xlsx" ) # 遍历文件夹中所有CSV文件 for csv_file in glob.glob("*.csv"): # 提取原CSV文件的无后缀名称 file_base_name = os.path.splitext(csv_file)[0] # 生成对应的XLSX文件名 target_xlsx = f"{file_base_name}.xlsx" # 仅处理当前单个CSV文件,转换为同名XLSX merge_all_to_a_book([csv_file], target_xlsx) print(f"转换完成: {csv_file} → {target_xlsx}")
关键修改说明
- 移除冗余的计数器
i:不再需要序列式命名,直接复用原文件名 - 提取原文件名:用
os.path.splitext()拆分文件名和后缀,得到不带.csv的基础名称 - 单个文件处理:调用
merge_all_to_a_book时传入当前单个CSV的列表,而不是所有CSV,确保每个文件单独转换 - 可选:避免覆盖已存在文件
如果目标文件夹中已有同名XLSX,上述代码会直接覆盖。若要避免覆盖,可以在生成target_xlsx后添加以下逻辑:
counter = 1 temp_xlsx = target_xlsx while os.path.exists(temp_xlsx): temp_xlsx = f"{file_base_name}_{counter}.xlsx" counter += 1 target_xlsx = temp_xlsx
这样重名时会自动添加数字后缀(例如report_1.xlsx、report_2.xlsx)。
内容的提问来源于stack exchange,提问作者tedy no
相关产品推荐
相关产品推荐

