遍历Excel多工作表并按条件转换为CSV的代码调试问题
问题分析与代码修正
你的代码存在逻辑和语法错误,以下是修正后的版本及关键问题说明:
原代码核心问题
- 遍历
df.items()时未正确解构元组:df.items()返回**(工作表名称, 对应数据框)**的元组,直接用sheets接收无法正确提取工作表名 - 判断条件
sheets[df.items()] == 'Shipment'完全错误,未正确获取工作表名称 - 读取Excel时存在语法错误:括号未闭合,
sheet_name与header参数传递方式错误 - 保存CSV时路径固定会导致文件被覆盖,未按工作表名区分输出文件
修正后的代码
import pandas as pd def convert_to_csv(excel_file): # 先获取所有工作表名称,避免一次性读取全部数据节省内存 xls = pd.ExcelFile(excel_file) sheet_names = xls.sheet_names for sheet_name in sheet_names: # 根据工作表名选择对应的header参数 header = 4 if sheet_name == 'Shipment' else 0 # 读取当前工作表数据 df = pd.read_excel(excel_file, sheet_name=sheet_name, header=header) # 按工作表名命名输出CSV,避免文件覆盖 output_path = f"{sheet_name}.csv" df.to_csv(output_path, decimal=',', index=False)
关键优化说明
- 使用
pd.ExcelFile先获取工作表列表,适合处理大文件,避免内存浪费 - 直接遍历工作表名称,逻辑更清晰易懂
- 用三元表达式简化
header的判断逻辑 - 输出文件名绑定工作表名称,确保每个工作表的CSV文件独立不被覆盖
- 修复了原代码的语法错误(括号闭合、参数传递)
内容的提问来源于stack exchange,提问作者Murtaza Mohsin
相关产品推荐
相关产品推荐

