JSON en CSV · eindproject
Eindproject: Project: de catalogus omzetten en aantonen dat die klopt
De converter is nu een keten van gerichte beloften:
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
Elke pijl bewaakt een andere grens. Door ze apart te houden kan een onjuiste hoeveelheid haar CSV-rij noemen, een verkeerd JSON-veld zijn item noemen en wordt een programmeerfout niet ten onrechte als beschadigde invoer gemeld.
Controleer het volledige contract
Lees SCHEMA.md nogmaals en bekijk daarna catalog.py van boven naar beneden. Vervang elke overgebleven pass, gekopieerde constante uitkomst, brede foutafhandeling of tijdelijke debug-afdruk.
Het uiteindelijke project moet al deze aanroepbare gedragingen bieden:
validate_headers(fieldnames)accepteert alleen de exacte kop in de juiste volgorde;read_csv_rows(path)gebruiktcsv.DictReaderen wijst beschadigde rijbreedtes af;parse_row(row, row_number)geeft een nieuw item met exact de juiste typen terug;read_catalog_csv(path)behoudt de rijvolgorde en duplicaten;validate_document(document)dwingt de exacte JSON-vorm en typen af;write_catalog_json(items, path)valideert en serialiseert deterministisch;read_catalog_json(path)verwerkt standaard-JSON en valideert die;convert_catalog(input_path, output_path)verbindt de twee bestandsovergangen;main()converteert de meegeleverde paden met gerichte foutafhandeling.
Open Bash in de projectwerkruimte en voer dit uit:
python catalog.py
De opdracht hoort dit te melden:
Wrote 3 items to catalog.json.
Open de gemaakte catalog.json. Controleer of het product met een komma nog steeds één naam is, Café leesbaar is, hoeveelheden integers zonder aanhalingstekens zijn, prijzen getallen zonder aanhalingstekens zijn en voorraadwaarden JSON-booleans zijn.
Test het met iets wat je nog niet hebt gezien
Je converter heeft nog maar één CSV-bestand ontmoet en is daarvoor geschreven. Dat is een zwakke basis om op in te leveren, dus geef hem eerst iets onbekends.
Open catalog.csv en verander dingen waarin een echt bestand zou verschillen: geef een product een andere naam, voeg een vierde rij toe, zet een hoeveelheid op 0, zet een komma in een naam en gebruik een prijs met meer decimalen. Voer de converter opnieuw uit en lees de JSON die hij heeft gemaakt.
Maak het vervolgens bewust stuk, één ding tegelijk, en controleer of de melding de juiste laag noemt:
zet
manyin een hoeveelheidscel; de fout hoort de rij te noemen;verwissel twee kolomkoppen; de fout hoort de verwachte kop te noemen;
verwijder een afsluitende accolade in
catalog.jsonen lees die terug; de fout hoort naar de JSON te wijzen, niet naar de CSV.
Herstel catalog.csv naar drie geldige rijen wanneer je klaar bent en druk dan op Check my work (mijn werk controleren).
Dit vóór het inleveren doen is geen bezigheidstherapie. Het is de gewoonte die code waarvan je gelooft dat die werkt onderscheidt van code die je hebt zien werken.
De praktische regel om te onthouden
Formaten nemen de noodzaak om keuzes te maken niet weg. CSV bepaalt niet welke cellen getallen zijn. JSON-syntaxis bepaalt niet welke velden je programma vereist. Schrijf het schema, zet waarden om bij de overgang, valideer voordat je vertrouwt en houd fouten specifiek genoeg om de beschadigde laag te herstellen.
Opdracht
Maak de volledige converter af, verwijder elke overgebleven pass of tijdelijke afkorting en voer dan python catalog.py in Bash uit om de huidige catalog.json te maken.
Lever in wanneer de opgeslagen JSON overeenkomt met catalog.csv, via hetzelfde schema wordt teruggelezen, de afgesproken typen op onbekende rijen behoudt en onjuist gevormde CSV en JSON afwijst zonder een brede afhandeling die alles opvangt.