Бинарные файлы: области применения
Бинарные файлы, в отличие от текстовых, хранят информацию как набор байтов. Они используются в:
- Мультимедиа (изображения, аудио, видео).
- Сетевых протоколах (обмен данными).
- Шифровании и сжатии данных (обеспечение безопасности и оптимизация ресурсов).
- Программировании микроконтроллеров и низкоуровневом программировании (работа с оборудованием).
- Базах данных (хранение нетекстовых данных, например, изображений).
Работа с бинарными файлами в Python
Работа с бинарными файлами в Python похожа на работу с текстовыми, но имеет особенности. Используются методы write, read и другие.
Ключевое отличие — параметр ‘b’ при открытии файла, указывающий на бинарный режим.
Запись в бинарный файл
Функция open() с параметром ‘wb’ создаёт и открывает бинарный файл для записи:
f = open('test.bin', 'wb')
f.write(b'Hello')
f.close()
Символ b перед строкой указывает на байтовую строку. Без него возникнет ошибка.
Чтение из бинарного файла
Режим ‘rb’ используется для чтения из бинарного файла:
f = open('test.bin', 'rb')
print(f.read())
f.close()
Работа с кириллицей
Прямая запись кириллицы без кодировки может привести к отображению символов как кодов. Для корректной записи используйте шестнадцатеричные коды (каждая буква в UTF-8 занимает 2 байта).
#Пример записи с использованием кодов
f = open('test.bin', 'wb')
f.write(b'xd0x9fxd1x80xd0xb8xd0xb2xd0xb5xd1x82')
f.close()
f = open('test.bin', 'rb')
print(f.read())
f.close()
Типы данных
При чтении бинарного файла данные представлены как объект типа bytes.
f = open('test.bin', 'rb')
res = f.read()
print(type(res)) # Вывод: <class 'bytes'>
print(res) # Вывод: байты
print(res.decode('utf-8')) # Декодирование в строку
f.close()
Методы decode() и encode() преобразуют между типами bytes и str с указанием кодировки (например, utf-8, utf-16).
Типы bytes и bytearray
Для работы с байтами используются:
- bytes: неизменяемый объект.
- bytearray: изменяемый объект.
Работа с изображениями
Бинарный режим позволяет работать с любыми данными, включая изображения. Можно прочитать содержимое изображения как байты и создать копию.
#Пример копирования изображения
f1 = open('image.jpg', 'rb')
data = f1.read()
f1.close()
f2 = open('image_copy.jpg', 'wb')
f2.write(data)
f2.close()
Модуль pickle
Модуль pickle сериализует и десериализует различные типы данных (числа, строки, списки, словари) без ручного управления байтами.
import pickle
# Запись данных
with open('data.bin', 'wb') as f:
pickle.dump({'Информатика': 5, 'Математика': 4}, f)
# Чтение данных
with open('data.bin', 'rb') as f:
data = pickle.load(f)
for subject, grade in data.items():
print(f'{subject}: {grade}')
Урок рассмотрел работу с бинарными файлами в Python, отличия от текстовых файлов и использование модуля pickle.