Python 3.6使用Pandas循环转CSV到Excel报错,求问题排查
代码报错排查与修复方案
嘿,我帮你揪出这段代码里的几个问题啦,正是这些点导致了运行报错:
关键错误点分析
- 同时混用两个Excel操作工具:你同时用了
xlsxwriter.Workbook和pandas的ExcelWriter来操作同一个文件,这俩工具会争夺文件控制权,直接导致写入异常。ExcelWriter内部会自己创建并管理工作簿,不需要手动再创建wb对象。 - 大小写拼写错误:Python对大小写敏感,
index=FALSE里的FALSE是大写的,Python会把它当成未定义的变量,直接抛出NameError。正确写法是小写的index=False。 - 工作表名称写死:循环里的
sheet_name='sh_sh_users'是固定值,不管循环到users还是account的csv,都往同一个工作表写,既不符合你要创建sh_users、sh_account的预期,还会导致重复写入的问题。 - 操作已关闭的文件:
with代码块结束后,ExcelWriter会自动关闭文件,这时候你再调用wb.add_worksheet,对应的文件句柄已经失效,肯定会报错。
修正后的代码
import pandas as pd from pandas.io.excel import ExcelWriter def create_excel_from_csv(): arr = ['users', 'account'] dest_filename = r'transformed.xlsx' # 用ExcelWriter统一管理工作簿,指定engine为xlsxwriter来支持高级操作 with ExcelWriter(dest_filename, engine='xlsxwriter') as ew: for item in arr: sheet_name = f'sh_{item}' # 读取csv并写入对应工作表,修正index参数的大小写 pd.read_csv(f'{item}.csv').to_excel(ew, index=False, sheet_name=sheet_name, encoding='utf-8') # 通过ew.book获取xlsxwriter的工作簿对象,在文件打开状态下添加隐藏工作表 wb = ew.book hidden_sheet = wb.add_worksheet('Sheet') hidden_sheet.hide() create_excel_from_csv()
修正说明
- 移除了没用的
openpyxl、CSV等导入,简化代码结构;用pd作为pandas的别名,符合Python社区的通用写法。 - 只保留
ExcelWriter来管理文件,通过ew.book获取xlsxwriter的工作簿对象,避免工具冲突。 - 动态生成工作表名称,每个csv文件对应到
sh_users、sh_account工作表,符合你的初始需求。 - 在
with代码块内部完成所有工作表操作,确保文件处于打开状态,避免操作已关闭文件的错误。
内容的提问来源于stack exchange,提问作者Aviad Amar
相关产品推荐
相关产品推荐

