Lekcja 6 / dane poza programem
JSON, pliki i błędy: zapis poza programem
Program kończy działanie i zmienne znikają. Jeśli chcesz zachować postęp, zapisujesz dane do pliku. JSON jest prostym formatem, który dobrze pasuje do takiego zadania.
Sytuacja z pracy
Uczeń ukończył dwie lekcje. Chcesz, żeby po ponownym uruchomieniu programu tracker nadal pamiętał, które lekcje są ukończone.
Plik progress.json
{
"course_name": "Python od podstaw",
"completed_lessons": ["Zmienne", "Warunki"]
}
Co to jest JSON?
JSON to tekstowy format danych. Wygląda podobnie do słownika w Pythonie, ale jest zapisany w pliku. Dzięki temu dane mogą przetrwać poza jednym uruchomieniem programu.
Kod: odczyt pliku
import json
with open("progress.json", "r", encoding="utf-8") as file:
progress = json.load(file)
print(progress["course_name"])
print(progress["completed_lessons"])
Wynik
Python od podstaw
['Zmienne', 'Warunki']
Kod: zapis zmiany
import json
with open("progress.json", "r", encoding="utf-8") as file:
progress = json.load(file)
progress["completed_lessons"].append("Pętle")
with open("progress.json", "w", encoding="utf-8") as file:
json.dump(progress, file, ensure_ascii=False, indent=2)
Co jeśli plik jest problemem?
Program nie powinien udawać, że wszystko jest dobrze. Jeśli plik nie istnieje albo JSON jest uszkodzony, lepiej pokazać czytelny komunikat niż dostać ścianę błędu.
Kod: try i except
import json
try:
with open("progress.json", "r", encoding="utf-8") as file:
progress = json.load(file)
except FileNotFoundError:
print("Brakuje pliku progress.json")
except json.JSONDecodeError:
print("Plik JSON jest uszkodzony")
Mini-zadanie
Odczytaj z pliku tylko course_name i wypisz go na ekranie.
Ćwiczenie praktyczne
Dodaj do completed_lessons lekcję "Listy i pętle", zapisz plik i otwórz go ręcznie,
żeby zobaczyć efekt.
Quiz
Co robi json.load()?
Odczytuje JSON z pliku i zamienia go na dane Pythona.
Co robi json.dump()?
Zapisuje dane Pythona jako JSON.
Kiedy pojawia się FileNotFoundError?
Gdy program próbuje otworzyć plik, którego nie ma.
Co dalej?
Masz już dane, logikę i zapis. W następnej lekcji uporządkujesz to w klasę, żeby lekcja miała dane i zachowanie w jednym miejscu.