Sobes.tech
Junior

Сериалсозӣ чист?

sobes.tech AI

Ҷавоб аз AI

Сериализатсия — ин раванди структураи маълумот ё объектро ба формати, ки метавонад нигоҳ дошта шавад, тавассути шабака интиқол ё баъдан барқарор карда шавад, табдил додан аст. Процеси баръакс десериализатсия номида мешавад.

Мақсадҳои асосии сериализатсия:

  • Ҳолатро нигоҳ доштан: Имкон медиҳад, ки ҳолати объект ё структураи маълумот барои барқарорсозии баъдӣ нигоҳ дошта шавад.
  • Тарафдории маълумот: Формати стандарти барои мубодилаи маълумот байни системҳо ё равандҳо таъмин мекунад.
  • Кэшгирӣ: Маълумоти сериализатсияшуда барои нигоҳдории муваққатӣ дар кэш қулай аст.

Дар Python аксар вақт истифода мешаванд модулҳо ва форматҳои зерин барои сериализатсия:

  • pickle: Модул стандартии Python барои сериализатсия ва десериализатсияи объектҳои Python. Барои нигоҳдории ва боркунии маълумот дар дохили барномаҳои Python мувофиқ аст. Барои мубодилаи маълумот бо барномаҳои дигар забонҳо тавсия намешавад, зеро формат махсус аст.

    # нигоҳдории объект
    import pickle
    
    data = {'a': 1, 'b': [2, 3]}
    with open('data.pkl', 'wb') as f:
        pickle.dump(data, f)
    
    # боркунии объект
    with open('data.pkl', 'rb') as f:
        loaded_data = pickle.load(f)
    
  • json: Модул стандартии Python барои кор бо JSON (JavaScript Object Notation). Дар веб-API ва мубодилаи маълумот байни системҳо васеъ истифода мешавад. JSON формати матнӣ ва осон барои хондан аст. Маҳдудият дар навъи маълумотҳо дорад (стрингҳо, рақамҳо, булеви, рӯйхатҳо, луғатҳо, null).

    # сериализатсия ба JSON
    import json
    
    data = {'name': 'Alice', 'age': 30}
    json_string = json.dumps(data)
    print(json_string)
    
    # десериализатсия аз JSON
    loaded_data = json.loads(json_string)
    print(loaded_data)
    
  • yaml: Модул барои кор бо YAML (Yet Another Markup Language). Аз JSON осонтар ва хонданӣ аст. Баъзан барои файлҳои конфигуратсия истифода мешавад.

    # сериализатсия ба YAML (зарур аст насб кардани PyYAML)
    # import yaml
    #
    # data = {"list": [1, 2, 3], "dict": {"key": "value"}}
    # yaml_string = yaml.dump(data)
    # print(yaml_string)
    #
    # # десериализатсия аз YAML
    # loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
    # print(loaded_data)
    
  • protobuf (Protocol Buffers): Формати барои сериализатсия, ки аз ҷониби Google таҳия шудааст. Бинарӣ, самаранок ва схемаҳоро дастгирӣ мекунад (бо истифода аз файлҳои .proto). Дар системаҳое, ки талаботи баланд доранд ва RPC (Remote Procedure Call) истифода мешавад, маъмул аст.

Интихоби формат ба вазифаи мушаххас, талабот ба самаранокӣ, хонданӣ ва эҳтиёҷ ба ҳамкорӣ бо забонҳои дигар вобаста аст.