Модуль 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. Робота з бінарними файлами. Приклади збереження/читання упакованих двійкових даних
⇑