Python. Модуль pickle. Сериализация объектов. Примеры использования для записи/чтения информации из бинарных файлов

Модуль pickle. Сериализация объектов. Примеры использования для записи/чтения информации из бинарных файлов

 


Содержание


Поиск на других ресурсах:




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()

 


Связанные темы