Von CSV zu Excel mit Python

In einem älteren Blogbeitrag ging es darum, JSON-Daten als Excel-Datei zu speichern. Ergänzend dazu, wird in diesem Beitrag gezeigt, wie CSV-Daten in einem Excel-Dokument gespeichert werden können.

Dafür wird das Paket openpyxl verwendet, das gegebenenfalls installiert werden muss:

$ pip install openpyxl  # Windows
$ pip3 install openpyxl # Linux/macOS

Abgesehen von openpyxl muss auch csv importiert werden:

import csv
import openpyxl
from openpyxl.styles import Font

CSV-Datei lesen

Die CSV-Datei habe ich vom Open-Data-Portal des Landes Schleswig-Holstein geladen. Bei dem Datensatz handelt es sich um den Güterumschlag im Kieler Hafen. Im folgenden Beispiel werden lediglich die Ausfuhr-Daten gelesen.

Tipp: Um etwaige Probleme mit der Zeichenkodierung zu vermeiden, habe ich die heruntergeladene Datei als UTF8-Datei gespeichert.

DATA = 'kiel_gueterumschlag.csv'

def read_csv_data():
    with open(DATA) as csv_file:
        reader = csv.reader(csv_file, delimiter=';')
        header_row = next(reader)

        # Show header (1st row)
        print(header_row)

        # Index jeden Spaltenkopfes ausgeben
        for index, column_header in enumerate(header_row):
            print(index, column_header)

        years, export_values = [], []

        for row in reader:
            years.append(row[4])
            value = int(row[6])
            export_values.append(value)

        print(years)
        print(export_values)

        return (years, export_values)

Der Code entspricht im Wesentlichen meinen bisherigen Beispielen zum Thema CSV und Python, zum Beispiel diesem hier.

Freilich benötigt man nicht die print()-Anweisungen. Sie dienen hier nur zur Überprüfung der Werte. Gleichzeitig sind sie ein schönes Beispiel für häßliches “print-Debugging”. In einem späteren Blogbeitrag werde ich hierzu eine Alternative vorstellen. Im Blogbeitrag Python-Debugging mit breakpoint stelle ich Euch als Alternative breakpoint() und den Python-Debugger pdb vor.

Daten als Excel-Datei speichern

Und hier der Code, der für das Erzeugen der Excel-Datei notwendig ist:

def write_excel_data(data):

    # Call openpyxl.Workbook() to create a new blank Excel workbook
    workbook = openpyxl.Workbook()

    # Activate a sheet
    sheet = workbook.active

    # Set a title
    sheet.title = 'Güterumschlag im Kieler Hafen'

    # Set headline style
    bold16font = Font(size=16, bold=True)

    sheet['A1'] = 'Jahr'
    sheet['A1'].font = bold16font

    sheet['B1'] = 'Ausfuhr (in to)'
    sheet['B1'].font = bold16font

    print(data[0])  # -> print years
    print(data[1])  # -> print export values

    years_row = 2

    # Write years to 1st column
    for year in data[0]:
        sheet.cell(row=years_row, column=1).value = int(year)
        years_row += 1

    export_row = 2

    # Write data to 2nd column
    for export in data[1]:
        sheet.cell(row=export_row, column=2).value = export
        export_row += 1

    # Save the workbook (excel file)
    workbook.save('Kieler-Hafen-Export.xlsx')

Eine ausführliche Erklärung zum Code findet Ihr im Artikel “Von JSON zu Excel mit Python”. Auch hier bitte ich darum, das “print-Debugging” zu verzeihen.

Zum Schluss müssen beide Funktionen noch aufgerufen werden:

export_data = read_csv_data()
write_excel_data(export_data)

Der kompletten Code steht auf Github zum Download bereit.

Weiterführende Links