Можно ли в Python создавать бинарные файлы? Конечно можно.
Для этого в Python есть следующие инструменты:
▫️ тип данных bytes и bytearray
▫️ открытие файла в режиме wb (write binary) или rb (read binary)
▫️ модуль struct
Про модуль struct поговорим в первую очередь.
Файл в формате JSON или Yaml внутри себя содержит разметку данных. Всегда можно определить где список начался а где закончился. Где записана строка а где словарь. То есть формат записи данных содержит в себе элементы разметки данных.
В binary-файле данные не имеют визуальной разметки. Это просто байты, записанные один за другим. Правила записи и чтения находятся вне файла.
Модуль struct как раз и помогает с организацией данных в таком файле с помощью определения форматов записи для разных частей файла.
Модуль struct преобразует Python-объекты в массив байт, готовый к записи в файл и имеющий определённый вид.
Для этого всегда следует указывать формат преобразования (или, как оно здесь называется - запаковки).
Формат нужен для того, чтобы выделить достаточное количество байт для записи конкретного типа объекта. В последствии с помощью того же формата будет производиться чтение.
При этом следует помнить что мы говорим о типах языка С а не Python.
Именно формат определяет, что записано в конкретном месте файла, число, строка или что-то еще.
Вот какие токены формата у нас есть.
Помимо этого, первым символом можно указать порядок байтов. На разных системах одни и те же типы данных могут записываться по-разному, поэтому желательно указать конкретный способ из доступных. Если этого не сделать, то используется символ '@', то есть нативный для текущей системы.
В строке формата мы пишем в каком порядке и какие типы собираемся преобразовать в байты.
Запакуем в байты простое число, токен "i".
>>> import struct
>>> struct.pack('=i', 10)
b'\n\x00\x00\x00'
Теперь несколько float, при этом нужно передавать элементы не массивом а последовательностью аргументов.
>>> struct.pack('=fff', 1.0, 2.5, 4.1)
b'\x00\x00\x80?\x00\x00 @33\x83@'
Вместо нескольких токенов можно просто указать нужное количество элементов перед одним токеном, результат будет тот же.
>>> struct.pack('=3f', 1.0, 2.5, 4.1)
b'\x00\x00\x80?\x00\x00 @33\x83@'
Теперь запакуем разные типы
>>> data = struct.pack('=fiQ', 1.0, 4, 100500)
я запаковал типы float, int и unsigned long long (очень большой int, на 8 байт)
b'\x00\x00\x80?\x04\x00\x00...'
Распаковка происходит аналогично, но нужно указать тот же формат, который использовался при запаковке. Результат возвращается всегда в виде кортежа.
>>> struct.unpack('=fiQ', data)
(1.0, 4, 100500)
Как видите, ничего страшного!
#lib#basic
🇨🇺🎉 Ante el Maceo ecuestre, que convoca al combate, y sus “invencibles machetes”, pasaron cientos de miles de santiagueros, mientras en los restantes municipios las plazas y espacios públicos fueron tomados por el pueblo trabajador “para demostrarle a todos los que dudan, que no traicionaremos el legado de Fidel”, expresó Roberto López Regüeiferos, trabajador de la Industria Alimentaria, aferrado a una imagen del Líder Histórico.
“Ratificamos la defensa de la unidad nacional y de nuestro proyecto socialista”, expresó Mairelis Reyes Montes de Oca, miembro del Secretariado de la Central de Trabajadores en la provincia, al tiempo que denunció el bloqueo recrudecido, “que tampoco ha podido doblegarnos”.
#LaPatriaSeDefiende
✍️ Luis Alberto Portuondo
📸 Orlando Guimerá
🙌Pinareños reafirman que somos un pueblo dignidad, memoria y futuro:
Los trabajadores pinareños bien saben de valor y sacrificio, este pueblo es la mayor riqueza de una región que distingue por sus campos verdes, por sus personas hospitalarias, que no saben rendirse, expresó el secretario general de la CTC en Pinar del Río, Rubén Lloga Sixto.
Pinareños, marchemos por la patria, ¡avancemos hacia esta tribuna, en cuadro apretado, por Cuba y todos sus hijos, por nuestros derechos, por la paz, la soberanía y contra el bloqueo, porque hoy, como ayer, mañana y siempre, #LaPatriaSeDefiende!
📸ℹ️ Tele Pinar
🇨🇺| ¡Más de 6 millones de cubanos dieron su firma por la Patria!
“Mi firma por la Patria”, concebida como ejercicio de soberanía popular frente a la escalada de agresiones contra la nación.
#LaPatriaSeDefiende
✊🏻🇨🇺||A minutos de comenzar en la histórica Tribuna Antiimperialista, el acto central por el Día Internacional de los Trabajadores, este 1 de Mayo.
#LaPatriaSeDefiende
📸ℹ️ Prensa Latina
🇨🇺 Primero de Mayo de 2026: La Patria se defiende en las calles y plazas de Cuba
“La Patria se defiende en calles y plazas, este viernes al amanecer”, aseguró la víspera el presidente Díaz-Canel. Y hoy desfila el pueblo con valor, en defensa de los derechos y principios de los revolucionarios y sindicalistas, en un país soberano y antimperialista.
¡Cuba se alza hoy por los pueblos, contra los odios que al mundo envenenan!
¡Viva el Primero de Mayo!
#LaPatriaSeDefiende@cubadebate
Este Primero de Mayo, en Cuba, millones de personas tomarán las calles con una certeza clara: la Patria no es una consigna, es una responsabilidad histórica.
Unidos por Cuba, por el derecho a decidir su futuro, el trabajo, la dignidad y la soberanía.
En un contexto de agresión económica y mediática, la unidad no es solo un valor, es una necesidad política y social.
En Cuba #LaPatriaSeDefiende
🏫🧒💓| Proteger la educación de los niños es una prioridad para Cuba. Ante cada obstáculo ocasionado por el inhumano bloqueo de los Estados Unidos, nuestra voluntad prevalece y buscamos alternativas para mantener la sonrisa que convierte cada día en nuevas oportunidades. Así, también, #LaPatriaSeDefiende
#Cuba🇨🇺 Más de medio millón de habaneros colmaron la Tribuna Antiimperialista José Martí
La jornada deviene también escenario para reiterar el llamado a enfrentar los desafíos actuales con trabajo, creatividad y cohesión, en medio de un complejo contexto económico y bajo la persistencia del bloqueo.
#LaPatriaSeDefiende
#Cuba🇨🇺 La concentración estuvo presidida por el General de Ejército Raúl Castro Ruz, líder al frente de la Revolución Cubana; el Primer Secretario del Comité Central del Partido Comunista y Presidente de la República, Miguel Díaz-Canel Bermúdez; y el comandante del Ejército Rebelde José Ramón Machado Ventura.
A la conmemoración asistieron también 827 amigos de Cuba, en representación de 38 países, así como delegaciones de 152 organizaciones sindicales y solidarias.
#LaPatriaSeDefiende