如何在Python中将嵌套字典写入.xlsx文件(多工作表场景)
解决多列xlsx文件生成问题(替代xlwt)
嘿,我懂你的困扰——xlwt只支持老式的xls格式,列数上限卡得死死的256,碰到列数超标的场景直接就不行了。要搞定这个需求,换成支持xlsx格式的库就好,比如openpyxl或者xlsxwriter,这俩都没有256列的限制,完全能满足你的需求。下面我给你用openpyxl写个完整的示例代码,刚好能把你提供的字典转换成带两个独立工作表的xlsx文件:
步骤1:安装openpyxl
首先得先安装这个库,打开终端运行:
pip install openpyxl
步骤2:编写转换代码
把下面的代码保存成.py文件运行就行:
from openpyxl import Workbook # 你的原始数据字典 data = { "sheet_A": { "2017": {"col1": "a", "col2": "b", "col3": "c", "col4": "d"}, "2018": {"col1": "aa", "col2": "bb", "col3": "cc", "col4": "dd"}, "2019": {"col1": "aaa", "col2": "bbb", "col3": "ccc", "col4": "ddd"} }, "sheet_B": { "2017": {"col1": "e", "col2": "f", "col3": "g", "col4": "h"}, "2018": {"col1": "ee", "col2": "ff", "col3": "gg", "col4": "hh"}, "2019": {"col1": "eee", "col2": "fff", "col3": "ggg", "col4": "hhh"} } } # 创建工作簿对象 wb = Workbook() # 移除默认生成的空白工作表(可选,因为我们要创建对应名称的工作表) wb.remove(wb.active) # 遍历每个工作表的数据 for sheet_name, year_entries in data.items(): # 创建对应名称的工作表 ws = wb.create_sheet(title=sheet_name) # 获取表头(取第一个年份的列名,假设所有年份的列结构一致) headers = list(next(iter(year_entries.values())).keys()) # 写入表头到第一行 ws.append(headers) # 遍历每个年份的数据,逐行写入工作表 for year, col_values in year_entries.items(): # 组合成一行数据:年份 + 各列对应值 row_data = [year] + [col_values[header] for header in headers] ws.append(row_data) # 保存生成的xlsx文件 wb.save("multi_sheet_output.xlsx")
代码说明
- 这段代码会自动创建
sheet_A和sheet_B两个工作表,每个表的第一行是col1到col4的表头。 - 后续每行对应一个年份的数据,第一列为年份,后面跟着各列的具体值。
openpyxl支持xlsx格式的最大列数是16384,完全不用担心列数超标的问题,哪怕你后续列数再增加也能轻松处理。
内容的提问来源于stack exchange,提问作者Tokyo
相关产品推荐
相关产品推荐

