Python: Бинарные файлы для начинающих (Урок 23)

Бинарные файлы: области применения

Бинарные файлы, в отличие от текстовых, хранят информацию как набор байтов. Они используются в:

  • Мультимедиа (изображения, аудио, видео).
  • Сетевых протоколах (обмен данными).
  • Шифровании и сжатии данных (обеспечение безопасности и оптимизация ресурсов).
  • Программировании микроконтроллеров и низкоуровневом программировании (работа с оборудованием).
  • Базах данных (хранение нетекстовых данных, например, изображений).

Работа с бинарными файлами в 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.

Что будем искать? Например,программа