Einführung
In diesem Projekt lernst du, wie du JSON-Daten in das CSV-Format mit Python umwandeln kannst. Dies ist eine häufige Aufgabe in der Datenwissenschaft und -entwicklung, da JSON häufig für API-Antworten verwendet wird, während CSV ein beliebtes Format für das Speichern tabellarischer Daten ist.
👀 Vorschau
$ head result.csv
"IP","Status","Zeit","HttpReferer","HttpUserAgent","Anfrage","HttpXForwardedFor","BodyBytesSent","RemoteUser","Anfragegröße"
"72.55.30.187","202","[2016-02-23 16:25:10]","http://www.google.cn/search?q=hive","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;.NET CLR 2.0.50727)","GET /index.html HTTP/1.1","-","-","-","0"
"55.222.156.202","200","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0;.NET CLR 1.1.4322)","GET /login.php HTTP/1.1","-","-","-","0"
"190.215.55.29","201","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0;.NET CLR 1.1.4322)","GET /view.php HTTP/1.1","-","-","-","0"
"63.132.98.30","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /list.php HTTP/1.1","-","-","-","0"
"214.124.190.132","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53","GET /login.php HTTP/1.1","-","-","-","0"
"98.215.187.30","202","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /upload.php HTTP/1.1","-","-","-","0"
"143.55.168.187","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /login.php HTTP/1.1","-","-","-","0"
"98.190.201.29","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (Linux; Android 4.2.1; Galaxy Nexus Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19","GET /view.php HTTP/1.1","-","-","-","0"
"10.168.55.143","301","[2016-02-23 16:25:10]","http://cn.bing.com/search?q=spark mlib","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /admin/login.php HTTP/1.1","-","-","-","0"
🎯 Aufgaben
In diesem Projekt wirst du lernen:
- Wie du JSON-Daten lesen und verstehen kannst
- Wie du JSON-Daten in eine CSV-Datei umwandeln kannst
- Wie du die CSV-Datei mit den richtigen Spaltennamen und Formatierung schreibst
🏆 Errungenschaften
Nach Abschluss dieses Projekts wirst du in der Lage sein:
- JSON-Daten, die von APIs abgerufen werden, effizient in ein strukturiertes CSV-Format umzuwandeln
- Den Prozess des Parsens von JSON-Daten und das Schreiben in eine CSV-Datei zu verstehen
- Diese Fähigkeiten auf eine Vielzahl von Datenverarbeitung und -analyseaufgaben anzuwenden
JSON-Daten lesen und verstehen
In diesem Schritt lernst du, wie du die JSON-Daten aus der Datei web_access.json lesen und verstehen kannst.
- Öffne die Datei
web_access.json, die sich im Verzeichnis~/projectbefindet, mit einem Texteditor. - Untersuch die Inhalte der Datei. Du solltest ein Array von Objekten sehen, wobei jedes Objekt einen Eintrag in einem Web-Zugangsprotokoll darstellt. Jeder Eintrag hat mehrere Eigenschaften, wie
"IP","Status","Zeit","HttpReferer","HttpUserAgent","Anfrage","HttpXForwardedFor","BodyBytesSent","RemoteUser"und"Anfragegröße". - Vertraut dich mit der Struktur und dem Inhalt der JSON-Daten an. Diese Informationen werden im nächsten Schritt nützlich sein, wenn du die Daten in das CSV-Format umwandelst.
JSON in CSV umwandeln
In diesem Schritt lernst du, wie du die JSON-Daten aus der Datei web_access.json in eine CSV-Datei umwandeln kannst.
- Erstelle in dem Verzeichnis
~/projecteine neue Python-Datei namensconvert.py. - Importiere in der Datei
convert.pydie erforderlichen Bibliotheken:
import csv
import json
- Lies die JSON-Daten aus der Datei
web_access.json:
with open("web_access.json", "r") as json_file:
data = json.load(json_file)
- Definiere die Reihenfolge der Spalten in der CSV-Datei:
fieldnames = [
"IP",
"Status",
"Zeit",
"HttpReferer",
"HttpUserAgent",
"Anfrage",
"HttpXForwardedFor",
"BodyBytesSent",
"RemoteUser",
"Anfragegröße",
]
- Öffne in dem Verzeichnis
~/projecteine neue CSV-Datei namensresult.csvund erstelle eincsv.DictWriter-Objekt:
with open("result.csv", "w", newline="") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames, quoting=csv.QUOTE_ALL)
- Schreibe die Kopfzeile in die CSV-Datei:
writer.writeheader()
- Schreibe die Datenzeilen in die CSV-Datei:
for row in data:
writer.writerow(row)
Deine vollständige convert.py-Datei sollte so aussehen:
import csv
import json
## Lies JSON-Daten aus der Datei
with open("web_access.json", "r") as json_file:
data = json.load(json_file)
## Definiere die Reihenfolge der Spalten
fieldnames = [
"IP",
"Status",
"Zeit",
"HttpReferer",
"HttpUserAgent",
"Anfrage",
"HttpXForwardedFor",
"BodyBytesSent",
"RemoteUser",
"Anfragegröße",
]
## Schreibe in die CSV-Datei
with open("result.csv", "w", newline="") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames, quoting=csv.QUOTE_ALL)
## Schreibe die Kopfzeile
writer.writeheader()
## Schreibe die Datenzeilen
for row in data:
writer.writerow(row)
Den Python-Skript ausführen
In diesem Schritt wirst du das Skript convert.py ausführen, um die Datei result.csv zu generieren.
- Öffne ein Terminal und navigiere zum Verzeichnis
~/project. - Führe das Skript
convert.pymit dem folgenden Befehl aus:
python convert.py
- Nachdem das Skript abgeschlossen ist, solltest du in dem Verzeichnis
~/projecteine neue Datei namensresult.csvsehen. - Du kannst die ersten 10 Zeilen der Datei
result.csvmit dem folgenden Befehl anzeigen:
head result.csv
Dies sollte die Kopfzeile und die ersten 9 Datenzeilen der CSV-Datei ausgeben.
"IP","Status","Zeit","HttpReferer","HttpUserAgent","Anfrage","HttpXForwardedFor","BodyBytesSent","RemoteUser","Anfragegröße"
"72.55.30.187","202","[2016-02-23 16:25:10]","http://www.google.cn/search?q=hive","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;.NET CLR 2.0.50727)","GET /index.html HTTP/1.1","-","-","-","0"
"55.222.156.202","200","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0;.NET CLR 1.1.4322)","GET /login.php HTTP/1.1","-","-","-","0"
"190.215.55.29","201","[2016-02-23 16:25:10]","-","Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.0;.NET CLR 1.1.4322)","GET /view.php HTTP/1.1","-","-","-","0"
"63.132.98.30","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /list.php HTTP/1.1","-","-","-","0"
"214.124.190.132","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53","GET /login.php HTTP/1.1","-","-","-","0"
"98.215.187.30","202","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /upload.php HTTP/1.1","-","-","-","0"
"143.55.168.187","201","[2016-02-23 16:25:10]","-","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /login.php HTTP/1.1","-","-","-","0"
"98.190.201.29","200","[2016-02-23 16:25:10]","-","Mozilla/5.0 (Linux; Android 4.2.1; Galaxy Nexus Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19","GET /view.php HTTP/1.1","-","-","-","0"
"10.168.55.143","301","[2016-02-23 16:25:10]","http://cn.bing.com/search?q=spark mlib","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)","GET /admin/login.php HTTP/1.1","-","-","-","0"
Herzlichen Glückwunsch! Du hast die JSON-Daten aus der Datei web_access.json erfolgreich in eine CSV-Datei namens result.csv umgewandelt.
Zusammenfassung
Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.



