Бинарные файлы в отличие от текстовых хранят информацию в виде набора байт. Для работы с ними в Python необходим встроенный модуль pickle. Этот модуль предоставляет два метода:
- dump(obj, file): записывает объект obj в бинарный файл file
- load(file): считывает данные из бинарного файла в объект
При открытии бинарного файла на чтение или запись также надо учитывать, что нам нужно применять режим «b» в дополнение к режиму записи («w») или чтения («r»). Допустим, надо надо сохранить два объекта:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import pickle FILENAME = "user.dat"name = "Tom"age = 19with open(FILENAME, "wb") as file:pickle.dump(name, file)pickle.dump(age, file) with open(FILENAME, "rb") as file:name = pickle.load(file)age = pickle.load(file)print("Имя:", name, "\tВозраст:", age) |
С помощью функции dump последовательно записываются два объекта. Поэтому при чтении файла также последовательно посредством функции load мы можем считать эти объекты. Консольный вывод программы:
Имя: Tom Возраст: 28
Подобным образом мы можем сохранять и извлекать из файла наборы объектов:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import pickleFILENAME = "users.dat" users = [["Tom", 28, True],["Alice", 23, False],["Bob", 34, False]] with open(FILENAME, "wb") as file:pickle.dump(users, file) with open(FILENAME, "rb") as file:users_from_file = pickle.load(file)for user in users_from_file:print("Имя:", user[0], "\tВозраст:", user[1], "\tЖенат(замужем):", user[2]) |
В зависимости от того, какой объект мы записывали функцией dump, тот же объект будет возвращен функцией load при считывании файла.
Консольный вывод:
Имя: Tom Возраст: 28 Женат(замужем): True Имя: Alice Возраст: 23 Женат(замужем): False Имя: Bob Возраст: 34 Женат(замужем): False