在 Python 中将 namedtuples 转换为 XLSX

此 Python 代码片段允许你使用 xlsxwriternamedtuple 实例的可迭代对象转换为 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	f

Check out similar posts by category: Python