====== Datenformate ======
Die exportierten Daten erhalten Sie meist in einem der folgenden Formaten.
Alle diese Formate sind **Text-Dateien**, d.h. sie enthalten nur Buchstaben ohne jegliche stilistische Formatierung (wie Schriftart, Grösse, Farbe etc.).
Diese Dateien können alle mit einem Text-Editor (z.B. Notepad++) betrachtet und auch modifiziert werden.
Folgende Formate sind geläufig in diesen Datenexporten:
* JSON (sehr einfach maschinenlesbar, steht für «JavaScript Object Notation»)
* CSV («murksiges» Format, kann meist gut von eine Tabellenkalkulation eingelesen werden, steht für «Comma seperated values», wobei das Deutsche Excel natürlich Strichpunkte braucht und nicht mit Kommas umgehen kann :-/)
* HTML (Webseiten, sieht gut im Browser aus, ist aber meist mühsam daraus Daten zur Weiterverarbeitung zu extrahieren).
===== JSON =====
JSON kann unter anderem folgende Dinge speichern:
* Zahlen
* Zeichenketten (Strings), immer zwischen Anführungszeichen
* Listen, immer zwischen eckigen Klammern, Einträge durch Kommas getrennt, z.B.
["hallo",
2,
[1,2,3]
]
* Objects, eine Liste mit «Schlüssel:Wert»-Paaren, immer zwischen geschweiften Klammern, z.B.
{"name":"Wurst",
"vorname":"Hans",
"alter":24,
"noten":{"info":[5.5, 6, 4],
"mathe":[3, 4.6, 5]
}
}
Für die bessere Lesbarkeit dürfen Zeilenumbrüche oder Leerschläge eingefügt werden. Diese werden aber ignoriert und sind nicht nötig (mal abgesehen von der besseren Lesbarkeit für Menschen).
==== Einlesen von JSON in Python ====
JSON-Dateien können sehr einfach mit Python eingelesen und weiterbearbeitet werden:
import json
with open("meindaten.json","r") as f:
daten = json.load(f)
=== Zugriff ===
Auf Einträge eines Objects können wie folgt zugegriffen werden (Annahme: Die Variable ''daten'' enthält das obige JSON-Object:
data = {"name":"Wurst", "vorname":"Hans", "alter":24, "noten":{"info":[5.5, 6, 4], "mathe":[3, 4.6, 5]} }
print(data["vorname"]) # Gibt Hans aus
print(data["noten"]["mathe"]) # Gibt [3, 4.6, 5] aus
print(data["noten"]["info"][1]) # Gibt 6 aus (die zweite Note hat den Index 1, die erste hat den Index 0)
=== Interation ===
Alle Einträge einer Liste durchgehen:
liste = [42,"bla","blu"]
for eintrag in liste:
print(f"Hier ist ein Eintrag: {eintrag}")
Alle Schlüssel und Werte eines Objects (in Python Dictionary gennant) durchgehen:
objekt = {"name":"Wurst", "vorname":"Hans"}
for schluessel in objekt:
print(f"Zum Schlüssel {schluessel} gehört der Wert {object[schluessel]}")
===== CSV-Datein =====
Das CSV-Format ist nicht genau spezifiziert und unterschliedliche Versionen auch der selben Tabellenkalkulation lesen und schreiben diese Dateien unterschiedlich. Eine typische Datei sieht wie folgt aus:
"Vorname","Name","Alter"
"Hans","Wurst",17
"Vreneli","von Guggisberg",18
====== Daten extrahieren ======
Für JSON-Dateien bietet sich Python an.
Für CSV-Dateien eine Tabellenkalkulation.
Es ist aber auch möglich, die Daten direkt in Notepad++ mit geschicktem Suchen/Ersetzen herauszubekommen. Auch könnte direkt auf der Kommandozeile mit den Kommandos ''grep'' und ''cut'' gearbeitet werden. Z.B. für den JSON-Export der YouTube history:
# Erst alle Zeilen mit dem String time ausgeben
# Dann alles nach dem ersten Doppelpunkt ausgeben
# Dann alles zwischen dem ersten und zweiten Anführungszeichen ausgeben
grep time history/watch-history.json | cut -f2-9 -d: | cut -f2 -d\"
''grep time'' liefert z.B.:
"time": "2020-05-24T17:57:17.153Z",
"time": "2020-05-24T17:53:07.393Z",
"time": "2020-05-24T17:53:02.705Z",
Das erste ''cut -f2-9 -d:'' macht daraus
"2020-05-24T17:57:17.153Z",
"2020-05-24T17:53:07.393Z",
"2020-05-24T17:53:02.705Z",
und das letzte ''cut -f2 -d\"'' macht daraus
2020-05-24T17:57:17.153Z
2020-05-24T17:53:07.393Z
2020-05-24T17:53:02.705Z