Найти - Пользователи
Полная версия: Зачем сериализировать данные в файл?
Начало » Python для новичков » Зачем сериализировать данные в файл?
1
Djo0513
Не хотел я спрашивать этот вопрос здесь, но пришлось так как нигде не нашёл ответ. Зачем сериализировать данные в файл? Это типо шифрования? Но зачем шифровать то, что каждый может дешифровать. В википедии написано для передачи данных в интернете ( если не ошибаюсь), а что нельзя передать файл с несериализованными данными? Дайте пожалуйста полный ответ.
JOHN_16
Сериализация - Нет это не шифрование. Да это для передачи данных. Не файлов, а данных, объектов. Но видимо раз у Вас нету понимания, то и задач таких нет.
wi34rd
Сериализация и десериализация быстрее и проще (не надо самому изгаляться), чем записывать в файл несериализованные данные.
scidam
Есть, однако, определение, проясняющее суть:
Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации (структуризации) — восстановление начального состояния структуры данных из битовой последовательности.

Пример.
У вас есть экземляр класса Table, и вы хотите этот экземпляр сохранить в файл, чтобы потом продолжить с ним работу. Как вы сохраните этот экземпляр в файл, чтобы потом загрузить его обратно и превратить снова в экземлпяр класса Table? Вот для этого и нужен процесс сериализации и ему обратный.

Вот небольшой пример, который это иллюстрирует.

 # serialization and deserialization example 
class Table:
    def __init__(self, w, h):
        self.width = w
        self.height = h
def serialize_table_and_save(obj, filename='data.dat'):
    with open(filename, 'w') as f:
        f.write('{},{}'.format(obj.width, obj.height))
def load_and_deserialize_table(filename='data.dat'):
    obj = None
    with open(filename, 'r') as f:
        try:
            w, h = f.read().split(',')
            obj = Table(float(w), float(h))
        except: # I know, that isn't good... 
            print('Something goes wrong...')
    return obj
if __name__ == '__main__':
    print('Lets create an instance of the class Table')
    new_table = Table(2, 4)
    print('The instance was created successfully...')
    print('Lets try to save it to a file')
    serialize_table_and_save(new_table)
    print('Created instance of the class Table was saved to a file')
    print('Lets delete saved instance')
    del new_table
    print('There is no instances of the class Table in the global namespace')
    print('Lets restore one from the file')
    just_created_table = load_and_deserialize_table()
    if isinstance(just_created_table, Table):
        print('Test successfully passed: an instance of the class Table was saved to a file and succuessfully loaded from it.')
    else:
        print('Something was wrong during (de)serialization or I/O operations')
    print('Good bye!')





py.user.next
Djo0513
Зачем сериализировать данные в файл? Это типо шифрования?
Не, это перевод данных в такой вид, который однозначно можно будет восстановить на другом компе или в другой версии питона в то же самое. Когда оно сериализовано, его можно как хранить локально на протяжении любого времени, так и передавать куда-нибудь.

В пределах питона используется pickle, а вообще часто используется xml для этого.
Djo0513
py.user.next
И только? Как часто используется сериализация-десериализиация в программировании?
FishHook
Djo0513
И только? Как часто используется сериализация-десериализиация в программировании?
Очень часто. Любые сетевые программы, включая веб используют сериализацию. Вы получаете данные из БД и строите на основании этих данных набор объектов. Далее, вам надо этот набор объектов передать на клиента. Во-первых, как это сделать по сети? Надо превратить объект в набор байтов на одной стороне и затем выполнить обратное преобразование на другой. Во вторых, на клиента вообще нет питона, там браузер и джаваскрипт. Вы должны выбрать формат данных, поддерживаемый как серверной, так и клиентской стороной. Это и есть сериализация - превращение объекта в некий набор бинарных или текстовых данных и воввстановление объекта из этих данных. Да и не сетевым программам не обойтись без сериализации. Предложите какой-нибудь способ организовать сохранение в игре?
py.user.next
Djo0513
Как часто используется сериализация-десериализиация в программировании?
Когда программа имеет какое-то состояние и его надо быстро сохранить и потом восстановить в точности. Тот же самый режим сна у операционной системы или снимок состояния виртуальной машины. Всё это на диск сохраняется и потом с него восстанавливается обратно.
PooH
py.user.next
Тот же самый режим сна у операционной системы
Не путай человека, тут нет сериализации, просто измененные несохраненные страницы сбрасываются на диск.
py.user.next
PooH
тут нет сериализации, просто измененные несохраненные страницы сбрасываются на диск
Не, просто это так хочется, чтобы было. Не думаю, что там ограничено одной оперативной памятью всё. Иначе можно было бы бэкапить систему путём сохранения образа оперативной памяти. Да и сериализация описывается функцией и обратной к ней. А функция может быть идемпотентной.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB