Модуль pickle. Сериализация объектов. Примеры использования для записи/чтения информации из бинарных файлов
Содержание
- 1. Модуль pickle. Сериализация/десериализация объектов. Назначение
- 2. Использование модуля pickle. Методы dump(), load()
- 3. Чтение/запись списка, который содержит вещественные числа. Пример
- 4. Запись/чтение кортежа, содержащего строки. Пример
- 5. Чтение/запись множества с разнотипными данными. Пример
- 6. Запись/чтение разнотипных объектов: списка, кортежа и словаря. Пример
- Связанные темы
Поиск на других ресурсах:
1. Модуль pickle. Сериализация/десериализация объектов. Назначение
Модуль pickle позволяет сохранять в файлах любые объекты Python без использования лишних преобразований. В целом, модуль pickle реализует двоичный протокол для сериализации и десериализации объектов. Под сериализацией понимается преобразование объектов в строку байт. Десериализация предусматривает обратную операцию конвертирования потока байт в исходный объект.
С помощью модуля pickle можно:
- реализовывать преобразование иерархии объектов в поток байтов (pickling). Потоком байтов может быть, например, файл;
- выполнять обратное преобразование потока байтов в иерархию объектов (unpickling). Поток байтов может быть получен с двоичного файла или байтового объекта.
⇑
2. Использование модуля pickle. Методы dump(), load()
Модуль pickle используется для работы с объектами типа bytes и обеспечивает сериализацию объектов.
Чтобы использовать методы модуля pickle, предварительно его нужно подключить
import pickle
Чтобы записать объект в файл нужно использовать метод dump(). Простейший вызов метода выглядит следующим образом
pickle.dump(obj, file, protocol = None, *, fix_imports = True)
где
- obj – сохраняемый объект. Этим объектом может быть число, строка, список, кортеж, множество, словарь или другой объект;
- file – бинарный файл, в котором объект может быть сохранен.
Для чтения объекта из файла используется метод load(). В простейшем случае вызов метода load() следующий
obj = pickle.load(file)
здесь obj – объект, получаемый из файла file.
⇑
3. Чтение/запись списка, который содержит вещественные числа. Пример
С помощью методов dump() и load() модуля pickle можно сохранять разнообразные списки в файлах. При этом не нужно делать дополнительных преобразований.
# Модуль pickle. Работа с файлами # Запись/чтение списка, содержащего вещественные числа # 1. Исходный список L = [ 2.85, 3.35, -1.77, 9.2 ] # 2. Подключить модуль pickle import pickle # 3. Запись списка в бинарный файл # 3.1. Открыть файл для записи f = open('myfile.bin', 'wb') # 3.2. Сохранить список L в файле f pickle.dump(L, f) # 3.3. Закрыть файл f.close() # 4. Чтение списка из файла # 4.1. Открыть файл для чтения f = open('myfile.bin', 'rb') # 4.2. Считать список из файла L2 = pickle.load(f) # 4.3. Вывести список L2 print('L2 = ', L2) # L2 = [2.85, 3.35, -1.77, 9.2] # 4.4. Закрыть файл f.close()
Результат выполнения программы
L2 = [2.85, 3.35, -1.77, 9.2]
⇑
4. Запись/чтение кортежа, содержащего строки. Пример
Запись и чтение кортежа не отличается от записи и чтения списка или любого иного объекта.
# Модуль pickle. Работа с бинарными файлами # Запись/чтение кортежа # 1. Заданный кортеж строк T = ( 'abc', 'abcd', 'cde', 'fgh hij' ) # 2. Подключить модуль pickle import pickle # 3. Сохранить кортеж в файле # 3.1. Открыть файл для записи f = open('myfile.bin', 'wb') # 3.2. Сохранить кортеж T в файле f pickle.dump(T, f) # 3.3. Закрыть файл f.close() # 4. Чтение кортежа из файла # 4.1. Открыть файл для чтения f = open('myfile.bin', 'rb') # 4.2. Считать кортеж из файла T2 = pickle.load(f) # 4.3. Закрыть файл f.close() # 5. Вывести кортеж print('T2 = ', T2) # T2 = ('abc', 'abcd', 'cde', 'fgh hij')
Результат выполнения программы
T2 = ('abc', 'abcd', 'cde', 'fgh hij')
⇑
5. Чтение/запись множества с разнотипными данными. Пример
# Модуль pickle. Работа с бинарными файлами # Запись/чтение множества # 1. Заданное множество разнотипных объектов M = { 2, 5.85, True, 'abcde' } # 2. Подключить модуль pickle import pickle # 3. Сохранить множество в файле # 3.1. Открыть файл для записи f = open('myfile.bin', 'wb') # 3.2. Сохранить множество M в файле f pickle.dump(M, f) # 3.3. Закрыть файл f.close() # 4. Чтение множества из файла # 4.1. Открыть файл для чтения f = open('myfile.bin', 'rb') # 4.2. Прочитать множество из файла M2 = pickle.load(f) # 4.3. Закрыть файл f.close() # 5. Вывести множество print('M2 = ', M2) # M2 = {True, 5.85, 2, 'abcde'}
Результат работы программы
M2 = {True, 5.85, 2, 'abcde'}
⇑
6. Запись/чтение разнотипных объектов: списка, кортежа и словаря. Пример
В данном примере продемонстрированы возможности модуля pickle для сохранения объектов разных типов: списка, кортежа и словаря.
# Модуль pickle. Работа с файлами # Запись/чтение разнотипных объектов # 1. Входные данные # 1.1. Исходный список L = [ True, 'abc', 2.5, 100 ] # 1.2. Исходный кортеж T = ( 2.55, False, 'Hello' ) # 1.3. Словарь с разнотипными объектами D = { 1:'abc', 2:2.55, 'Three':False } # 2. Подключить модуль pickle import pickle # 3. Запись данных в бинарный файл # 3.1. Открыть файл для записи f = open('myfile.bin', 'wb') # 3.2. Сохранить список L в файл f pickle.dump(L, f) # 3.3. Сохранить кортеж в файл pickle.dump(T, f) # 3.4. Сохранить словарь D в файле f pickle.dump(D, f) # 3.5. Закрыть файл f.close() # 4. Чтение списка из файла # 4.1. Открыть файл для чтения f = open('myfile.bin', 'rb') # 4.2. Прочитать список из файла L2 = pickle.load(f) # 4.3. Прочитать кортеж из файла T2 = pickle.load(f) # 4.4. Прочитать словарь из файла D2 = pickle.load(f) # 4.5. Вывести список, кортеж и словарь print('L2 = ', L2) # L2 = [True, 'abc', 2.5, 100] print('T2 = ', T2) # T2 = (2.55, False, 'Hello') print('D2 = ', D2) # D2 = {1: 'abc', 2: 2.55, 'Three': False} # 4.6. Закрыть файл f.close()
⇑
Связанные темы
- Файлы. Общие понятия. Открытие/закрытие файла. Функции open(), close()
- Примеры работы с текстовыми файлами
- Примеры работы с бинарными файлами
- Модуль struct. Работа с бинарными файлами. Примеры сохранения/чтения упакованных двоичных данных
⇑