在 Python 中将 namedtuples 转换为 XLSX
此 Python 代码片段允许你使用 xlsxwriter 将 namedtuple 实例的可迭代对象转换为 XLSX 文件。
标题自动从可迭代对象的第一个元素确定。如果可迭代对象为空,结果 XLSX 文件也将为空。
namedtuples_to_xlsx.py
import xlsxwriter
import itertools
from collections import namedtuple
def xlsx_write_rows(filename, rows):
"""
从行的可迭代对象写入 XLSX 行。
每行必须是可写值的可迭代对象。
返回写入的行数
"""
workbook = xlsxwriter.Workbook(filename)
worksheet = workbook.add_worksheet()
# 写入值
nrows = 0
for i, row in enumerate(rows):
for j, val in enumerate(row):
worksheet.write(i, j, val)
nrows += 1
# 清理
workbook.close()
return nrows
def namedtuples_to_xlsx(filename, values):
"""
将 namedtuples 的列表或生成器转换为 XLSX 文件。
返回写入的行数。
"""
try:
# 确保它是生成器(列表上不允许 next())
values = (v for v in values)
# 使用第一行生成标题
peek = next(values)
header = list(peek.__class__._fields)
return xlsx_write_rows(filename, itertools.chain([header], [peek], values))
except StopIteration: # 空生成器
# 写入空 xlsx
return xlsx_write_rows(filename, [])示例用法:
namedtuples_to_xlsx_usage.py
MyType = namedtuple("MyType", ["ID", "Name", "Value"])
namedtuples_to_xlsx("test.xlsx", [
MyType(1, "a", "b"),
MyType(2, "c", "d"),
MyType(3, "e", "f"),
])此示例将生成此表:
xlsx_output.txt
ID Name Value
1 a b
2 c d
3 e fCheck out similar posts by category:
Python
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow