====== JSON-Dateien ======
* JSON-Dateien sind ebenfalls Text-Dateien, in denen ebenfalls strukturierte Information gespeichert werden kann, und zwar in der **JavaScript Object Notation**, kurz JSON.
* JSON-Dateien können sehr einfach in Python importiert werden und dann verarbeitet werden.
* JSON kennt u.a. folgenden Datentypen:
* Zahlen
* Strings (Zeichenketten, zwischen Anführungszeichen
* Listen (zwischen ''['' und '']''), die wieder JSON-Datentypen enthalten kann.
* Dictionaries (zwischen ''{'' und ''}''). Diese sind wie Listen, aber mit beliebigen Strings anstatt Zahlen als Indizies.
* Mehr dazu auf https://www.json.org/json-de.html
===== Listen (Arrays) =====
Testen und verstehen Sie (Zeile für Zeile!) folgendes Python-Programm:
primzahlen = [2,3,5,7,11,13,17,19,23]
for p in primzahlen:
print("%d ist prim!" % p)
# Indizies starten bei 0!
print("Die zweite Primzahl ist %d" % primzahlen[1])
csv = "" # Leere Zeichenkette
for p in primzahlen:
csv += "%d;" % p
csv+="\n" # Zeilenumbruch
print(csv)
* Listen werden zwischen ''['' und '']'' durch Kommas getrennt geschrieben.
* Zugriff auf einzelne Elemente erfolgt mit z.B. ''a[2]'' (drittes Element der Liste, die in der Variablen ''a'' gespeichert ist).
* Mit Format-Strings können Dinge wie Zahlen formatiert ausgegeben werden. Das Format ist
print("bla %d bla" % 5) # <- %d wird durch 5 ersetzt, man erhält "bla 5 bla"
print("x=%d, y=%d" % (23,42)) # <- das erste %d wird durch 23, das zweite durch 42 ersetzt, man erhält "x=23, y=42".
* Listen können auch wieder Listen enthalten:
tabelle = [[1,2,3],[4,5,6]]
print(tabelle[0]) # erstes Element ist die Liste [1,2,3]
print(tabelle[0][1]) # zweites Element der Liste [1,2,3], also 2.
print("\nZeilenweise Ausgabe:")
for zeile in tabelle:
print(zeile)
Vervollständigen Sie folgenden Python-Code, so dass er die Tabelle im CSV Format ausgibt:
tabelle = [[x*y for x in range(1,6)] for y in range(1,6)]
print("Ganze tabelle:")
print(tabelle)
csv = ""
#
# Hier die Variable csv erweitern
# Inspirieren Sie sich dabei beim Beispiel mit den Primzahlen
#
# Ausgabe
print(csv)
Die Ausgabe soll wie folgt aussehen:
1;2;3;4;5;
2;4;6;8;10;
3;6;9;12;15;
4;8;12;16;20;
5;10;15;20;25;
====== JSON in, CSV out ======
* Speichern Sie folgende Datei im Ordner ''challenges'': {{lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:data01.json}}
* Folgender Code liest die JSON-Datei ein und man erhält einen liste in der Variablen ''data'':
import json # Für die Verarbeitung von JSON-Daten
# Datei öffnen
datei = open("data01.json")
# JSON-Daten parsen
data = json.load(datei)
# Datei schliessen
datei.close()
# Schlaufe über die Daten
for i in range(len(data)):
print("data[%d] = %s" % (i,data[i]))
* Erweitern Sie obiges Python-Programm so, dass eine Zeile im CSV-Format produziert wird.
* Speichern Sie folgende Datei im Ordner ''challenges'': {{lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:data07.json}}
* Schreiben Sie ein Python-Programm, das die Datei ''data07.json'' einliest und eine Zeile im CSV-Format produziert.
* Speichern Sie das Resultat in der Datei ''data07.csv'' mit dem folgenden Code:
datei = open("data07.csv", "w") # Datei zum Schreiben öffnen.
datei.write(csv)
datei.close()
* Überprüfen Sie, ob sich die Datei mit Excel korrekt öffnen lässt.
====== Dictionaries (JSON Objects) ======
* Listen (Array) werden mit Zahlen von 0 bis n-1 indiziert, wobei n die Anzahl Element sind.
* Dictionaries werden durch Strings (Zeichenketten) indiziert und haben a priori keine fixe Ordnung.
* Dictionaries werden zwischen ''{'' und ''}'' geschrieben, wobei die einzelnen Einträge aus einem String in Anführungszeichen (der Key), einem Doppelpunkt '':'' und einem Wert (Value) bestehen. Die Werte können beliebige Python-Objekte sein, wie Zahlen, Strings, Listen oder auch wieder Dictionaries.
* Studieren Sie folgenden Code:
d = {"4eNP": 23, "4iW" : 22, "4kW" : 20}
print(d["4iW"]) # Liefert 22
print(d.keys()) # Liefert ['4kW', '4iW', '4eNP']
print(d.values()) # Liefert [20, 22, 23]
print(d.items()) # Liefert [('4kW', 20), ('4iW', 22), ('4eNP', 23)]
# Loop über alle Elmente
for key,value in d.items():
print("d['%s']=%d" % (key, value))
* Schreiben Sie ein Python-Programm, das folgende JSON-Datei in eine CSV-Datei mit 2 Spalten umwandelt: {{lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:data03.json}}
Verwenden Sie dazu obige Code-Blöcke, um die JSON-Datei einzulesen und am Schluss das CSV zu schreiben. Schauen Sie sich die JSON-Datei an und/oder geben Sie den Inhalt in Python aus (mit ''print(data)'' in obigen Code-Beispielen). Überlegen Sie sich, was die übergeordnete Struktur ist, und wie Sie mit einer ''for''-Schlaufe über die Elemente Iterieren können.
* Diejenigen, die Daten im JSON-Format haben (z.B. von Spotify), können versuchen, diese als CSV zu exportieren. Die anderen können diese Datei verwenden: {{lehrkraefte:blc:informatik:glf4-20:umgang-mit-dateien:data04.json}}.