Можно ли в 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
#Commentary: #Ethiopian National Dialogue Commission: Monolingual mediator in multilingual country
Established in 2021, the National Dialogue Commission (#NDC) is tasked with fostering inclusive dialogue, peace, and social cohesion in #Ethiopia. However, Mesfin Wodajo argues the Commission operates in a “de facto monolingual” manner in a country of more than eighty languages. Despite its commitment to inclusivity, he contends its heavy reliance on Amharic risks “alienating” large segments of the population.
Mesfin cautions that “language could constrain or empower participants in such national dialogues" and emphasizes that the absence of a clear translation and interpreting strategy reflects an “age-old ideology of implicit linguistic nationalism.”
He urges the NDC to “adopt a multilingual operational framework” to safeguard linguistic rights and ensure meaningful participation for all.
https://addisstandard.com/?p=55668
#Italia#Calabria#Catanzaro
#NdC|Centro presenterà una lista alle elezioni comunali di Catanzaro. Non è ancora chiaro chi sosterrà il partito di Mastella.
@UltimoraPolitics
❗️Il #Senato manda a processo Carlo #Calenda: era stato querelato per diffamazione da Clemente #Mastella (#NdC) per un post durante la campagna elettorale delle europee.
Il centrodestra si astiene, Calenda mandato a processo dagli alleati del campo largo.
@UltimoraPolitics
#Italia#Campania#Benevento
Il mastelliano Nino #Lombardi (#NdC) vince le elezioni provinciali col 73%, battuto il candidato di PD-Azione #Calzone, centrodestra assente. Esulta #Mastella: "Alle elezioni pronti ad andare da soli in tutta la Campania."
@UltimoraPolitics
#Italia🇮🇹
#Regionali
#Campania
❗️Roberto #Fico (#M5S|LEFT; sostenuto anche da #PD|S&D, #AVS|G/EFA|LEFT, #PSI|S&D, #PRI|Centro, #PSDI|Centro-sinistra; #Volt|G/EFA, #IV|RE, #PiùEu|RE, #nDC|Centro, #NS|Centro-destra, liste minori e civici) è stato eletto Presidente della Giunta regionale della Campania.
@TuttoElezioni
#Italia#Elezioni#Provinciali#Avellino
Il Tar di Salerno ha accolto il ricorso di Angelantonio D’Agostino disponendo l’annullamento delle operazioni elettorali concernenti l’elezione del Presidente della Provincia di Avellino relativamente alle fasce demografiche B e D e conseguente rinnovazione delle elezioni stesse limitatamente alle suddette fasce demografiche B e D.
Le elezioni del 2021 avevano visto la vittoria di Rino #Buonopane, sostenuto da #PD, #M5S, #SI e #NdC con il 50.05% contro Angelo Antonio #D’Agostino, sostenuto dalla maggioranza comunale ad Avellino, #Davvero, #IV, #PiùE e #Azione, che aveva ottenuto il 49,95%.
@UltimoraPolitics
#Italia#Campania#Provinciali
Provinciali #Caserta, dati finali - RICOSTRUZIONE ESCLUSIVA OsservatorioItaliano:
🔵 Centro destra per la Provincia di Caserta (#FdI-#FI-#Lega-#NM): 31.85% - 6 seggi
🟠 Campo Largo per Caserta (#PD-#AVS-#NdC-#IV): 21.42% - 4 seggi
🔵 Anacleto Colombiano Presidente (Civica centrodestra legata a Colombiano): 20.61% - 3 seggi
🟠#ATA|Deluchiani: 14.60% - 2 seggi
🔵 Liberi e Democratici per Caserta (#Azione-dissidenti #PSI legati al consigliere regionale Giovanni Iovino): 8.90% - 1 seggio
🟠 Avanti Caserta (#PSI): 2.63% - 0 seggi
*Nella giornata di domani verranno pubblicati i dati ufficiali
@OsservatorioItaliano
#Italia#Comunali#Campania
Comunali di #Salerno: De Luca spacca le coalizioni ed è un tutti contro tutti. Di seguito i candidati:
📌 Vincenzo #DeLuca, sostenuto da #PD, #PSI, #EV, #ATA e civiche deluchiane
📌 Franco Massimo #Lanocita, sostenuto da #M5S, #SI e civiche di sinistra
📌 Armando Zambrano, sostenuto da #Azione, #IV, #NdC, #PLD e #FI
📌 Gherardo Maria #Marenghi, sostenuto da #FdI, #Lega e #NM
📌 Mimmo Ventura, sostenuto da #AP e Dimensione Bandecchi
📌 Alessandro Turchi, civico
@OsservatorioItaliano