Можно ли в 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
#Israele
Ministro della Giustizia Yariv #Levin (#Likud|ECR): “Come membro del Likud, rispetterò la decisione del Primo Ministro sulla riforma della giustizia. Lo affermo in piena consapevolezza del fatto che la situazione possa condurre al crollo del governo e dello stesso partito Likud.”
@OsservatorioEsteri
#Israele
Il premier #Netanyahu (#Likud|ECR) ha annunciato di aver revocato il decreto con cui aveva disposto le dimissioni del Ministro della Difesa Yoav #Gallant (#Likud|ECR): “Abbiamo avuto delle divergenze, ma Gallant rimane nella sua posizione.”
@OsservatorioEsteri
#Israele#Gaza
Ynet riporta che alti funzionari dell'Ufficio del Primo Ministro Benjamin #Netanyahu (#Likud|ECR|PfE) hanno dichiarato che "la tregua è stata rotta, occuperemo completamente la Striscia di Gaza. Ci saranno anche attività nelle aree in cui sono tenuti gli ostaggi. La decisione è stata presa: Israele occuperà la Striscia di Gaza. #Hamas non rilascerà altri ostaggi senza la resa completa, non ci arrenderemo. Se non agiamo ora, gli ostaggi moriranno di fame e Gaza rimarrà sotto il controllo di Hamas."
@OsservatorioEsteri
#Israele#Gaza
Il Primo Ministro israeliano Benjamin #Netanyahu (#Likud|ECR) ha annunciato che i combattimenti continueranno: “Non siamo pronti ad accettare una situazione in cui i battaglioni di #Hamas escono dai loro bunker, riprendono il controllo di Gaza e tornano a minacciare i cittadini di Israele negli insediamenti circostanti, nelle città del sud, in tutte le parti del paese
Pertanto, Israele non accetterà le richieste di Hamas, che significano la resa, e continuerà a combattere finché tutti i suoi obiettivi non saranno raggiunti".
@OsservatorioEsteri
#Israele#Palestina
Premier Benjamin #Netanyahu (#Likud|ECR): "Siamo in una guerra, non in un'operazione. #Hamas ha lanciato un attacco omicida a sorpresa contro lo Stato di Israele e i suoi cittadini. Ho ordinato innanzitutto di ripulire gli insediamenti dai militanti infiltrati e ho ordinato una mobilitazione su larga scala delle riserve. Il nemico pagherà un prezzo senza precedenti."
@OsservatorioEsteri
#USA#Israele
Il Presidente Joe #Biden (#D|Centro-sinistra) ha avuto un colloquio telefonico con il Primo Ministro israeliano Benjamin #Netanyahu (#Likud|ECR). I due leader hanno discusso della situazione a Gaza, e Biden ha sottolineato che "gli attacchi contro gli operatori umanitari e la situazione umanitaria complessiva sono inaccettabili".
La Casa Bianca fa sapere che Biden abbia chiarito la necessità che Israele "annunci e attui una serie di passi specifici, concreti e misurabili per affrontare i danni civili, le sofferenze umanitarie e la sicurezza degli operatori umanitari".
Inoltre, Biden ha affermato che la politica degli Stati Uniti "rispetto a Gaza sarà determinata dalla nostra valutazione dell'azione immediata di Israele su questi passi", sottolineando che un cessate il fuoco immediato "è essenziale per stabilizzare e migliorare la situazione umanitaria e proteggere i civili innocenti".
@OsservatorioEsteri
#USA#Israele#Iran
Il Presidente Joe #Biden (#D|Centro-sinistra) ha detto al Premier israeliano Benjamin #Netanyahu (#Likud|ECR) durante una telefonata che gli Stati Uniti non sosterranno alcun contrattacco israeliano contro l'Iran, ha dichiarato ad Axios un alto funzionario della Casa Bianca.
@OsservatorioEsteri
#CPI#Israele
La Corte Penale Internazionale ha emesso mandati d'arresto per il Primo Ministro Benjamin #Netanyahu (#Likud|ECR) e l’ex ministro della Difesa Yoav #Gallant (Likud) per crimini di guerra e crimini contro l'umanità.
@OsservatorioEsteri
#Israele#ONU
Ministro degli Esteri Israel #Katz (#Likud|ECR): "Oggi ho deciso di dichiarare il Segretario generale dell'ONU Antonio #Guterres una persona non desiderata in Israele e di vietargli l'ingresso in Israele. Coloro che non sono in grado di condannare senza ambiguità l'attacco criminale dell'Iran contro Israele, come hanno fatto quasi tutti i paesi del mondo, non sono degni di calpestare il suolo israeliano. Si tratta di un segretario generale che non ha denunciato il massacro e i crimini sessuali perpetrati dagli assassini di Hamas il 7 ottobre, e non ha portato a decisioni che li dichiareranno organizzazione terroristica. Un segretario generale che dà una spinta ai terroristi, stupratori e assassini di Hamas, Hezbollah, gli Houthis, e ora la nave madre del terrorismo globale, l'Iran, sarà ricordato come una macchia nella storia dell'ONU. Israele continuerà a proteggere i suoi cittadini e manterrà il suo status nazionale e la sua dignità con o senza Antonio Guterres."
@OsservatorioEsteri
#Israele
È stato raggiunto un accordo tra il Premier Benjamin #Netanyahu (#Likud|ECR) e l'ex Ministro della Difesa Benny #Gantz (#NUP/#BaW|Centro) per la formazione di un governo d'emergenza nazionale.
@OsservatorioEsteri
#Israele
Il partito #BaW|Centro, che esprime Benny #Gantz e Gazi #Eisenkot nel gabinetto di guerra israeliano, ha presentato una proposta per sciogliere la #Knesset.
La coalizione di unità nazionale tra BaW e il #Likud|ECR sia avvia a volgere al termine.
@OsservatorioEsteri
#Israele
La maggioranza di governo è stata sconfitta nel voto decisivo della #Knesset per selezionare il componente politico chiamato a far parte del Comitato per la selezione dei giudici. A causa di dissidi interni alla coalizione, ad essere stata eletta è la parlamentare di #YA|Centro Karine #ElHarrar, votata anche da qualche esponente della maggioranza.
Solo 11 voti, contro i 58 di ElHarrar, per Tali #Gottlieb (#Likud|ECR).
@OsservatorioEsteri