Можно ли в 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
#Obras sobre el incendio de Roma el 18 de julio del 64:
— Nerón contempla el incendio de Roma de Carl Theodor von Piloty, ca. 1861.
— Antorchas de Nerón de Henryk Siemiradzki, 1876.
#historia#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx
#Obras relacionadas con la Batalla de Puebla:
— El General Bazaine ataca el fuerte de San Javier durante el sitio de Puebla, 29 de Marzo de 1863 de Jean-Adolphe Beauce
— Marcha para Puebla: el general Forey en campamento de San Agustín del Palmar tomado de Le Monde Illustré: journal hebdomadaire, nº 316, 02/05/1863.
— Lancero derriba a un oficial francés de Manuel Serrano (1875)
— Carga de la caballería mexicana en la Batalla de Puebla
#historia#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx
#Obras de Leonardo da Vinci (puedes ver más aquí):
— La Virgen, el niño Jesús, y santa Ana (ca. 1503)
— San Juan Bautista (1513-16)
— La belle ferronnière (ca. 1490-95)
— La adoración de los magos (1480-82)
— Ginevra de' Benci (ca. 1474-78)
— Virgen de las rocas (1483-86)
— The Burlington House Cartoon (ca. 1499-1500)
— Virgen con el niño y rosas (conocida también como Madonna Benois, 1478-80)
#Obras relacionadas con Leonardo da Vinci:
— La batalla de Anghiari, copia de Peter Paul Rubens a partir de La lucha por el estandarte de Da Vinci (1603)
— Francisco I recibiendo los últimos suspiros de Leonardo da Vinci de Jean-Auguste-Dominique Ingres (1818)
#historia#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx
#Obras que representan la Gran Exhibición de 1851 en el Crystal Palace:
— View from the Knightsbridge Road of The Crystal Palace in Hyde Park for Grand International Exhibition of 1851 por Read & Co. Engravers & Printers (1851)
— The Foreign Department, viewed towards the transept de J. McNeven (1851)
— La reina Victoria inaugura la Gran Exposición en el Crystal Palace de Hyde Park, Londres; representación de Louis Haghe (1851)
— The transept from the Grand Entrance, Souvenir of the Great Exhibition de J. McNeven (1851)
#historia#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx
#Obras sobre Maximiliano de Habsurgo:
— Monedas de 20 pesos que muestran a Maximiliano I de México (1866)
— Busto en yeso de Maximiliano y Carlota de Habsburgo
— The Mexican Deligation appoints Ferdinand Maximilian of Austria as Emperor of Mexico (1864) de Cesare-Dell'Acqua (1867)
— Emperor Don Maximiliano I of Mexico de Franz Xaver Winterhalter (ca. 1865)
— Emperor Maximilian of Mexico before the Execution de Jean-Paul Laurens (1882)
— Exécution de l'Empereur Maximilien du Mexique de Édouard Manet (1868)
#historia#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx
#Obras sobre los cuentos de Hans Christian Andersen:
— El soldadito de plomo, representación de Bertall
— Pulgarcita
— Dibujo del libro Fairy tales and stories de Hans Tegner (1900)
— La reina de las nieves, Lumikuningatar de Rudolf Koivu (1946)
— La sirenita, The Little Mermaid de Elena Ringo (2021)
— El patito feo, representación de Milo Winter (1916)
#literatura#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx
#Efemérides || 27 de agosto de 1847
El general Antonio López de Santa Anna confiere al general Nicolás Bravo el mando de Chapultepec para que organice la defensa del castillo ante los invasores estadounidenses.
#Obras:
— Antonio Lopez de Santa Anna pintado por Carlos Paris.
— Retrato póstumo de Nicolás Bravo pintado por José Inés Tovilla.
#historia#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx
#Efemérides || 18 de agosto de 293 a. C.
Comienza la institución de los festivales Vinalia Rustica. Éstas son unas festividades entorno al vino y en honor a Venus, diosa del amor, la belleza y la fertilidad de la mitología romana a quien se adoraba y festejaba en muchas fiestas y mitos religiosos romanos.
Su culto empezó en Ardea y Lavinio (Lacio). El 15 de agosto de 293 a. C. le fue dedicado su templo más antiguo del que se tiene constancia, y el 18 de agosto se instituyó la fiesta llamada Vinalia Rustica. El 25 de abril de 215 a. C. le fue dedicado un templo fuera de la Porta Colina en la colina Capitolina para conmemorar la derrota romana en la batalla del Lago Trasimeno.
#Obras:
— Tannhäuser en el Venusberg (poeta del s. XIII en un lugar mitológico del folklor europeo) de John Collier, 1901.
— Venus de Milo, datada entre el 150 y el 125 a. C.
— Venus Anadiómena de Titian, ca. 1520.
#historia#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx
#Efemérides || 17 de julio de 1429
Carlos VII de Francia es coronado como rey de Francia en la catedral de Reims después de la exitosa campaña de Juana de Arco en la Guerra de los Cien Años.
#Obras:
— Juana de Arco en la Coronación de Carlos VII en la catedral de Reims de Jean Auguste Dominique Ingres, 1854.
— Juana de Arco de Jules Eugène Lenepveu, 1890.
#historia#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx
#Efemérides || 3 de mayo de 326
En Bizancio, Helena de Constantinopla (madre del emperador Constantino) dice haber encontrado la cruz de madera en la que murió Jesucristo.
#Obras:
— Santa Helena con la Vera Cruz de Francesco Morandini (ca. 1575)
— Hallazgo de la Vera Cruz, en el libro Las muy bellas horas de Nuestra Señora o Libro de Horas de Turín, de Jan van Eyck (1422)
— Santa Helena y la Cruz de Giovanni Battista Cima da Conegliano (1495)
#historia#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx
#Obras de Jacques-Louis David:
— La muerte de Marat (1793)
— El juramento de los Horacios (1784)
— La muerte de Sócrates (1787)
— El juramento del juego de pelota (esbozo de 1791)
— La rapto de las Sabinas (1798)
#pintura#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx
#Obras de William Harnett:
— La fiel Colt (1890)
— Still Life Violin and Music (1888)
— After the Hunt (1885)
— Attention, Company! (1878)
— The Old Violin (1886)
#pintura#ArteFuturaMX
https://artefutura.com.mx
@artefuturamx