Namedtuples in XLSX konvertieren in Python

English Deutsch

Dieses Python-Snippet ermöglicht es dir, ein Iterable von namedtuple-Instanzen in eine XLSX-Datei zu konvertieren, indem xlsxwriter verwendet wird.

Der Header wird automatisch aus dem ersten Element des Iterables bestimmt. Wenn das Iterable leer ist, ist auch die resultierende XLSX-Datei leer.

namedtuples_to_xlsx.py
import xlsxwriter
import itertools
from collections import namedtuple

def xlsx_write_rows(filename, rows):
    """
    Schreibt XLSX-Zeilen aus einem Iterable von Zeilen.
    Jede Zeile muss ein Iterable von schreibbaren Werten sein.

    Gibt die Anzahl der geschriebenen Zeilen zurück
    """
    workbook = xlsxwriter.Workbook(filename)
    worksheet = workbook.add_worksheet()
    # Werte schreiben
    nrows = 0
    for i, row in enumerate(rows):
        for j, val in enumerate(row):
            worksheet.write(i, j, val)
        nrows += 1
    # Aufräumen
    workbook.close()
    return nrows


def namedtuples_to_xlsx(filename, values):
    """
    Konvertiert eine Liste oder einen Generator von namedtuples in eine XLSX-Datei.
    Gibt die Anzahl der geschriebenen Zeilen zurück.
    """
    try:
        # Sicherstellen, dass es ein Generator ist (next() nicht auf Listen erlaubt)
        values = (v for v in values)
        # Erste Zeile verwenden, um Header zu generieren
        peek = next(values)
        header = list(peek.__class__._fields)
        return xlsx_write_rows(filename, itertools.chain([header], [peek], values))
    except StopIteration:  # Leerer Generator
        # Leere XLSX schreiben
        return xlsx_write_rows(filename, [])

Verwendungsbeispiel:

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"),
])

Dieses Beispiel generiert diese Tabelle:

xlsx_output.txt
ID	Name	Value
1	a	b
2	c	d
3	e	f

Check out similar posts by category: Python