如何用Pandas与Glob批量转换.xlsx为.csv及解决相关报错
解决.xlsx转.csv并遍历文件夹的问题
首先来说你遇到的TypeError: 'module' object is not callable错误——这大概率是因为你直接把glob模块当成函数调用了!比如错误写法是:
import glob files = glob("*.xlsx") # 这里错把模块当函数用了
正确的做法是调用模块里的glob()函数,两种方式任选其一:
# 方式1:导入模块后调用方法 import glob files = glob.glob("JanuaryDataSentToResourcePro/*.xlsx") # 方式2:直接导入glob函数 from glob import glob files = glob("JanuaryDataSentToResourcePro/*.xlsx")
接下来解决核心的.xlsx转csv问题,Python标准库没法直接处理xlsx文件,推荐用pandas来做,代码简洁易读,非常适合新手。
完整实现步骤
1. 安装依赖库
打开终端/命令行,安装pandas和openpyxl(pandas读取xlsx需要openpyxl作为引擎):
pip install pandas openpyxl
2. 完整代码
import pandas as pd from glob import glob import os # 目标文件夹路径 folder_path = "JanuaryDataSentToResourcePro" # 获取文件夹下所有xlsx文件(兼容不同系统路径) xlsx_files = glob(os.path.join(folder_path, "*.xlsx")) # 遍历每个文件进行转换 for file in xlsx_files: # 读取xlsx文件 df = pd.read_excel(file, engine="openpyxl") # 生成csv文件名:替换原后缀为.csv csv_file = os.path.splitext(file)[0] + ".csv" # 保存为csv,避免中文乱码+不写入多余索引列 df.to_csv(csv_file, index=False, encoding="utf-8-sig") print(f"已完成转换:{file} -> {csv_file}")
代码细节说明
os.path.join(folder_path, "*.xlsx"):自动适配Windows/macOS/Linux的路径分隔符,避免路径错误os.path.splitext(file)[0]:提取不带后缀的原文件名,保证转换后文件名和原文件一致index=False:不写入pandas自动生成的索引列,让csv内容和原xlsx保持一致encoding="utf-8-sig":解决Windows下打开csv时的中文乱码问题
不想用pandas?试试原生openpyxl方案
如果不想安装pandas,也可以用openpyxl直接操作xlsx文件,代码稍繁琐但轻量化:
from openpyxl import load_workbook from glob import glob import os import csv folder_path = "JanuaryDataSentToResourcePro" xlsx_files = glob(os.path.join(folder_path, "*.xlsx")) for file in xlsx_files: wb = load_workbook(file) ws = wb.active # 获取第一个工作表(如果需要指定表名可以用wb["表名"]) csv_file = os.path.splitext(file)[0] + ".csv" with open(csv_file, "w", newline="", encoding="utf-8-sig") as f: writer = csv.writer(f) # 逐行读取并写入csv for row in ws.iter_rows(values_only=True): writer.writerow(row) print(f"已完成转换:{file} -> {csv_file}")
排查小技巧
如果还是无法转换,先检查这几点:
- 文件夹路径是否正确?可以用
print(os.path.exists(folder_path))验证路径是否存在 - 目标xlsx文件是否损坏?手动打开确认能正常读取
- 依赖库是否安装成功?在Python交互环境输入
import pandas和import openpyxl验证
内容的提问来源于stack exchange,提问作者Serdia
相关产品推荐
相关产品推荐

