0%

JSON und CSV · Abschlussprojekt

Abschlussprojekt: Projekt: Den Katalog konvertieren und prüfen

Der Konverter ist jetzt eine Kette eng begrenzter Zusagen:

catalog.csv bytes
  -> decoded UTF-8 text
  -> CSV header and raw row dictionaries
  -> normalized typed item dictionaries
  -> validated JSON document
  -> catalog.json bytes
  -> parsed and validated document

Jeder Pfeil schützt eine andere Grenze. Weil sie getrennt bleiben, kann eine ungültige Menge ihre CSV-Zeile nennen, ein falsches JSON-Feld seinen Artikel benennen und ein Programmierfehler unverfälscht sichtbar bleiben, statt als beschädigte Eingabe zu gelten.

Den vollständigen Vertrag prüfen

Lies SCHEMA.md noch einmal und gehe dann catalog.py von oben nach unten durch. Ersetze jedes verbliebene pass, jedes kopierte konstante Ergebnis, jede breite Fehlerbehandlung und jede vorübergehende Debug-Ausgabe.

Das fertige Projekt muss alle diese aufrufbaren Verhaltensweisen bereitstellen:

  • validate_headers(fieldnames) akzeptiert ausschließlich die genaue Kopfzeile in der festgelegten Reihenfolge;

  • read_csv_rows(path) verwendet csv.DictReader und lehnt fehlerhafte Zeilenbreiten ab;

  • parse_row(row, row_number) gibt einen neuen Artikel mit genau den festgelegten Typen zurück;

  • read_catalog_csv(path) bewahrt Zeilenreihenfolge und Duplikate;

  • validate_document(document) erzwingt die genaue JSON-Struktur und die Typen;

  • write_catalog_json(items, path) validiert und serialisiert deterministisch;

  • read_catalog_json(path) liest standardkonformes JSON ein und validiert es;

  • convert_catalog(input_path, output_path) verbindet die beiden Dateischnittstellen;

  • main() konvertiert die bereitgestellten Pfade mit eng begrenzter Fehlerbehandlung.

Öffne Bash im Projektarbeitsbereich und führe Folgendes aus:

python catalog.py

Der Befehl sollte Folgendes melden:

Wrote 3 items to catalog.json.

Öffne die erzeugte catalog.json. Prüfe, ob das Produkt mit Komma weiterhin einen einzigen Namen hat, Café lesbar ist, Mengen ganze Zahlen ohne Anführungszeichen sind, Preise Zahlen ohne Anführungszeichen sind und Lagerbestandswerte boolesche JSON-Werte sind.

Mit etwas Unbekanntem testen

Dein Konverter kennt bisher nur eine CSV-Datei und wurde passend zu ihr geschrieben. Das ist keine starke Grundlage für eine Einreichung. Gib ihm deshalb zuerst etwas Unbekanntes.

Öffne catalog.csv und ändere Dinge, in denen sich eine echte Datei unterscheiden würde: Benenne ein Produkt um, ergänze eine vierte Zeile, setze eine Menge auf 0, füge ein Komma in einen Namen ein und verwende einen Preis mit mehr Nachkommastellen. Führe den Konverter erneut aus und lies das erzeugte JSON.

Mache die Eingaben dann absichtlich ungültig, jeweils an einer Stelle, und prüfe, ob die Meldung die richtige Ebene nennt:

  • trage many in eine Mengenzelle ein; der Fehler sollte die Zeile nennen;

  • vertausche zwei Spaltenüberschriften; der Fehler sollte die erwartete Kopfzeile nennen;

  • lösche eine schließende geschweifte Klammer in catalog.json und lies die Datei wieder ein; der Fehler sollte auf JSON verweisen, nicht auf CSV.

Stelle catalog.csv wieder auf drei gültige Zeilen zurück, wenn du fertig bist, und drücke dann Check my work.

Das vor dem Einreichen zu tun ist keine Beschäftigungstherapie. Es ist die Gewohnheit, die Code, von dem du glaubst, dass er funktioniert, von Code trennt, dessen Funktion du beobachtet hast.

Die praktische Regel zum Mitnehmen

Formate nehmen dir Entscheidungen nicht ab. CSV entscheidet nicht, welche Zellen Zahlen sind. JSON-Syntax entscheidet nicht, welche Felder dein Programm verlangt. Schreibe das Schema auf, wandle an der Schnittstelle um, validiere vor dem Vertrauen und halte Fehler so konkret, dass die beschädigte Ebene repariert werden kann.

Aufgabe

Vervollständige den gesamten Konverter, entferne jedes verbliebene pass und jede vorübergehende Abkürzung und führe dann in Bash python catalog.py aus, um die aktuelle catalog.json zu erstellen.

Reiche ein, wenn das gespeicherte JSON zu catalog.csv passt, sich über dasselbe Schema wieder einlesen lässt, bei unbekannten Zeilen die festgelegten Typen bewahrt und fehlerhaftes CSV und JSON ohne pauschale Fehlerbehandlung ablehnt.