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

 


Зв’язані теми