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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:40:15