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.