← До фільтрів та технологій

← До списку лабораторних по Python

Python Лабораторна 20: JSON проти pickle

Технологія: Python

Номер лабораторної: 20 · Рівень: middle

Тема: Серіалізація даних

Повний опис / сценарій лабораторної:

Meta: зрозуміти коли краще використовувати JSON, а коли pickle або інші формати.



Krok 1. Створити файл src/app/serialize20.py.

Komandi: cd ~/python_lab1/src; touch app/serialize20.py



Krok 2. Додати приклад складної структури даних.

Komanda: printf "import json
import pickle
from pathlib import Path

DATA = {
    "users": [
        {"id": 1, "name": "Taras"},
        {"id": 2, "name": "Oksana"},
    ],
    "meta": {"version": 1, "ok": True},
}

BASE = Path("data20")
BASE.mkdir(exist_ok=True)

" > app/serialize20.py



Krok 3. Додати функцію збереження у JSON.

Komanda: printf "import json
import pickle
from pathlib import Path

DATA = {
    "users": [
        {"id": 1, "name": "Taras"},
        {"id": 2, "name": "Oksana"},
    ],
    "meta": {"version": 1, "ok": True},
}

BASE = Path("data20")
BASE.mkdir(exist_ok=True)

def save_json():
    (BASE / "data.json").write_text(json.dumps(DATA, indent=2))

def load_json():
    return json.loads((BASE / "data.json").read_text())

def save_pickle():
    (BASE / "data.pkl").write_bytes(pickle.dumps(DATA))

def load_pickle():
    return pickle.loads((BASE / "data.pkl").read_bytes())

if __name__ == "__main__":
    save_json()
    save_pickle()
    print(load_json())
    print(load_pickle())
" > app/serialize20.py



Krok 4. Запустити модуль і перевірити створення файлів.

Komанда: export PYTHONPATH=$(pwd); python app/serialize20.py; ls data20



Krok 5. Порівняти розмір файлів.

Komanda: ls -lh data20



Krok 6. Відкрити JSON у текстовому редакторі.

Komanda: cat data20/data.json

Poyasnennya: формат читабельний для людини.



Krok 7. Занотувати ризики pickle щодо безпеки при завантаженні з недовірених джерел.



Krok 8. Продумати випадки де потрібен саме JSON наприклад для API.



Krok 9. Згадати інші формати серіалізації які застосовуються у прод середовищі наприклад msgpack або protobuf.



Krok 10. Mini zvit.

Zavdannya: опиши чим ти керуватимешся обираючи формат зберігання для конфігів і кешу.