Можно ли в 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
#Gloria#Vivaldi#HidemiSuzuki
Titulo:Gloria RV 589
Autor:Antonio Vivaldi
Movimientos:
🎵I. Gloria en excelsis Deo
🎵II. Et en terra pax
🎵III. Laudamus te
🎵IV. Gratias agimus tibi
🎵V. Propter magnam gloriam
🎵VI. Domine Deus
🎵VII. Domine, Fili unigenite
🎵VIII. Domine Deus, Agnus Dei
🎵IX. Qui tollis peccata mundi
🎵X. Qui sedes ad dexteram Patris
🎵XI. Quoniam tu solus sanctus
🎵XII. Cum Sancto Spiritu
Interpretación:
Conjunto barroco croata y solistas de la Orquesta Libera Classica (Japón)
El Coro Ángelus
Midori Suzuki - Soprano
Netsuko Someya - Soprano
Sumihito Uesugi - Contratenor
Director:
Hidemi Suzuki
Fuente:🎼
@ClasicaAlAtardecer
#Gloria#Vivaldi#HidemiSuzuki
GLORIA RV 589
Antonio Vivaldi compuso varios Gloria, un tipo de obra religiosa. La que está catalogada como de RV 589 es la más conocida y popular de la música sacra de Vivaldi, pero se sabe que al menos escribió dos Glorias más. Además de la mencionada RV 589, ha llegado a nosotros la RV 588 y hay otra que se ha perdido (RV 590), que sólo se menciona en el catálogo Kreuzherren. El RV 589 fue compuesto hacia 1713 y el RV 588 hacia 1717.
El repertorio coral de Vivaldi fue descubierto a principios del siglo XX. _A_ Alfredo Casella se le atribuye el estreno del Gloria RV 589, en 1939, tras más de 200 años (1713), desde que fuera escrito.
El Gloria RV 589, en re mayor, tiene una duración aproximada de un poco más de media hora y se compone de once o doce movimientos (dependiendo de si el cuarto y el quinto son contados como uno o son contados como un pasaje solamente).
🎵I. Gloria en excelsis Deo (Coro) Gloria, gloria, a Dios en lo más alto.
🎵II. Et en terra pax (Coro) y en la tierra paz y buena voluntad a los hombres.
🎵III. Laudamus te (Sopranos) Te alabamos, te bendecimos. Te adoramos, te glorificamos.
🎵IV. Gratias agimus tibi (Coro) Te damos gracias.
🎵V. Propter magnam gloriam (Coro) por tu gran gloria.
🎵VI. Domine Deus (Soprano) Señor Dios, Rey del cielo, Dios Padre Todopoderoso.
🎵VII. Domine, Fili unigenite (Coro) Señor, el hijo unigénito, Jesucristo.
🎵VIII. Domine Deus, Agnus Dei (Contralto) y coro Señor Dios, Cordero de Dios, Hijo del Padre. Quien quita los pecados del mundo Ten piedad de nosotros.
🎵IX. Qui tollis peccata mundi (Coro) que quita los pecados del mundo Recibe nuestra súplica.
🎵X. Qui sedes ad dexteram Patris (Contralto) Quien está sentado a la diestra del Padre, ten piedad de nosotros.
🎵XI. Quoniam tu solus sanctus (Coro) Porque solo tú eres santo, solo Tú eres el Señor, solo tú eres el más elevado Jesucristo.
🎵XII. Cum Sancto Spiritu (Coro) Con el Espíritu Santo, En la gloria de Dios el Padre, Amén.
Al componer, Vivaldi fragmentó el texto oratorio del Gloria en 11 secciones, cada una de las cuales tiene un ambiente musical propio, por lo cual, si se quiere, puede interpretarse aisladamente una sola pieza.
Todas las partes vocales, desde los dos solistas de soprano y alto hasta el tenor y el bajo, fueron escritos originalmente para voces de mujeres, ya que no se permitía a hombres en el Pio Ospedale della Pietà, exclusivamente femenino (Vivaldi y el resto del personal masculino eran , por supuesto, miembros del sacerdocio); de vez en cuando la parte del bajo se mueve tan bajo que incluso los bajos femeninos notables de la Pietà deben haber tenido que transponer una octava. Solo dos instrumentos de viento -un oboe y una trompeta- se agregan al habitual contingente barroco de cuerdas, y el bajo continuo probablemente se habría reproducido por órgano.
@ClasicaAlAtardecer