Sobes.tech
Junior

Czym jest serializacja?

sobes.tech AI

Odpowiedź od AI

Serializacja to proces konwersji struktury danych lub obiektu do formatu, który można zapisać, przesłać przez sieć lub później odtworzyć. Proces odwrotny nazywa się deserializacją.

Główne cele serializacji:

  • Zachowanie stanu: Umożliwia zapisanie stanu obiektu lub struktury danych do późniejszego odtworzenia.
  • Przesyłanie danych: Zapewnia ustandaryzowany format wymiany danych między różnymi systemami lub procesami.
  • Cache'owanie: Serializowane dane są wygodne do tymczasowego przechowywania w pamięci podręcznej.

W Pythonie często używa się następujących modułów i formatów do serializacji:

  • pickle: Standardowy moduł Pythona do serializacji i deserializacji obiektów Pythona. Odpowiedni do zapisywania i ładowania danych w aplikacjach Pythona. Niezalecany do wymiany danych z aplikacjami w innych językach ze względu na specyfikę formatu.

    # Zapisywanie obiektu
    import pickle
    
    data = {'a': 1, 'b': [2, 3]}
    with open('data.pkl', 'wb') as f:
        pickle.dump(data, f)
    
    # Wczytywanie obiektu
    with open('data.pkl', 'rb') as f:
        loaded_data = pickle.load(f)
    
  • json: Moduł standardowy do pracy z JSON (JavaScript Object Notation). Powszechnie używany do API webowych i wymiany danych między różnymi systemami. JSON jest tekstowym, czytelnym i lekkim formatem. Obsługuje ograniczony zestaw typów danych (łańcuchy, liczby, wartości boolean, listy, słowniki, null).

    # Serializacja do JSON
    import json
    
    data = {'name': 'Alice', 'age': 30}
    json_string = json.dumps(data)
    print(json_string)
    
    # Deserializacja z JSON
    loaded_data = json.loads(json_string)
    print(loaded_data)
    
  • yaml: Moduł do pracy z YAML (YAML Ain't Markup Language). Charakteryzuje się bardziej czytelną składnią w porównaniu do JSON. Często używany do plików konfiguracyjnych.

    # Serializacja do YAML (wymaga instalacji PyYAML)
    # import yaml
    #
    # data = {"list": [1, 2, 3], "dict": {"key": "value"}}
    # yaml_string = yaml.dump(data)
    # print(yaml_string)
    #
    # # Deserializacja z YAML
    # loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
    # print(loaded_data)
    
  • protobuf (Protocol Buffers): Format serializacji opracowany przez Google. Binarny, wydajny i obsługuje schematy danych (z użyciem plików .proto). Często używany w systemach wysokowydajnych i RPC (Remote Procedure Call).

Wybór formatu serializacji zależy od konkretnego zadania, wymagań dotyczących wydajności, czytelności i konieczności współpracy z innymi językami programowania.