使用csvkit批量转换CSV到XLSX遇模块不可调用错误求助
CSV批量转XLSX问题解答
方法可行性与问题定位
这个批量转换的思路是可行的,问题出在代码调用错误,而非整体逻辑。报错TypeError: 'module' object is not callable的原因是:你要么把convert模块当成函数调用,要么写错了函数名(代码里用了未定义的conv变量)。
修正后的csvkit批量转换代码
csvkit的convert模块需要调用内部的convert函数,以下是完整的可运行批量转换代码:
import os from csvkit.convert import convert # 替换为你的CSV文件夹路径 target_folder = "./your_csv_files" # 遍历文件夹下所有CSV文件 for file_name in os.listdir(target_folder): if file_name.lower().endswith(".csv"): csv_full_path = os.path.join(target_folder, file_name) # 生成对应XLSX文件名 xlsx_file_name = os.path.splitext(file_name)[0] + ".xlsx" xlsx_full_path = os.path.join(target_folder, xlsx_file_name) # 执行转换 with open(csv_full_path, 'rb') as csv_file: with open(xlsx_full_path, 'wb') as xlsx_file: convert(csv_file, xlsx_file, 'xlsx', encoding='utf-8') print(f"转换完成: {file_name} -> {xlsx_file_name}") print("所有文件批量转换结束!")
关键修正点
- 正确导入函数:
from csvkit.convert import convert(直接导入convert函数而非整个模块) - 调用正确的函数名:用
convert()替代代码里未定义的conv - 补充了文件夹遍历逻辑,实现真正的批量处理
其他简便批量转换方案
方案1:用pandas库(更灵活易读)
pandas是数据处理常用库,转换逻辑简洁,支持自定义参数:
import os import pandas as pd target_folder = "./your_csv_files" for file_name in os.listdir(target_folder): if file_name.lower().endswith(".csv"): csv_path = os.path.join(target_folder, file_name) xlsx_path = os.path.join(target_folder, os.path.splitext(file_name)[0] + ".xlsx") # 读取CSV并保存为XLSX(index=False避免生成多余索引列) df = pd.read_csv(csv_path, encoding='utf-8') df.to_excel(xlsx_path, index=False) print(f"转换完成: {file_name}") print("批量转换结束!")
方案2:命令行工具(无需写代码)
如果不想编写Python代码,可直接用命令行工具实现批量转换:
- csvkit命令行(需先安装
pip install csvkit):
打开终端进入目标文件夹,执行:for file in *.csv; do in2csv "$file" | csvformat > "${file%.csv}.xlsx"; done - LibreOffice命令行(需电脑安装LibreOffice):
终端进入目标文件夹,执行:for file in *.csv; do libreoffice --headless --convert-to xlsx "$file"; done
内容的提问来源于stack exchange,提问作者san
相关产品推荐
相关产品推荐

