Можно ли в 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
Venerdì Viktor Khoroshavtsev, ex membro del Consiglio federale russo (cioè il Senato) e dirigente nel settore petrolifero, è stato rilasciato dalla Corte di appello di Milano dopo che giovedì mattina era stato arrestato in un albergo di Somma Lombardo, vicino all’aeroporto di Malpensa, in esecuzione di un mandato di arresto internazionale emesso lo scorso maggio dalla #Russia. (ilPost)
@UltimoraPolitics24
The 33rd Ukrainian drone was shot down on approach to Moscow. This is the most massive attack on the capital in a long time.
#Russia
Original Post
Follow TRN👈
#Russia
Alla Duma russa hanno votato a favore dell’annessione delle regioni ucraine 413 deputati su 408 presenti. I votanti sono quindi superiori ai presenti.
@UltimoraPolitics
#Russia: Il Vicedirettore dell’intelligence militare russa, il Vice Generale Vladimir Alekseyev, è stato ferito da diversi colpi d’arma da fuoco mentre si trovava a Mosca.
Alekseyev, che ricopre la posizione dal 2011, è stato ricoverato in ospedale.
Non si hanno notizie su chi sia l’aggressore.
#Russia: La Russia avrebbe utilizzato un missile Oreshnik contro l'Ucraina nei bombardamenti che sono avvenuti durante la notte. Si tratta di un missile balistico a medio raggio che può contenere diverse bombe sia convenzionali che nucleari. La notizia, annunciata dall'aeronautica ucraina è stata poi confermata dal Ministero della Difesa russo.
"Le forze armate russe hanno lanciato un massiccio attacco con armi ad alta precisione lanciati da terra e dal mare, inclusi i sistemi missilistici a medio raggio Oreshnik".
Il Governo russo non ha specificato dove avrebbe colpito ma diverse esplosioni si sono registrate a Leopoli, città occidentale dell'Ucraina. Secondo l'Ucraina, il missile si stava muovendo alla velocità di 13mila km orari.
Non è la prima volta che la Russia impiega un missile di questo tipo. In passato era avvenuto nel novembre del 2024 e all'epoca Putin aveva spiegato che si trattava di una ritorsione contro Stati Uniti e Regno Unito per aver dato il via libera a Kyiv di colpire il territorio russo con armi occidentali.
#Russia: Il Senatore Lindsey Graham (R-South Carolina) ha dichiarato che Donald Trump ha dato il via libera al pacchetto di sanzioni contro la Russia. Il testo, preparato negli scorsi mesi da un gruppo di senatori bipartisan, era in attesa che la Casa Bianca desse l'ok. L'Amministrazione ha cercato di prendere tempo per vedere se la via diplomatica e negoziale con la Russia producesse l'effetto sperato.
"Dopo un incontro produttivo con il Presidente Trump su una serie di argomenti, [egli] ha dato il via libera al pacchetto di sanzioni bipartisan su cui ho lavorato per mesi con il Senatore Blumenthal e molti altri", ha dichiarato Graham, secondo cui il voto potrebbe avvenire la settimana prossima. "L'Ucraina sta facendo le concessioni per la pace, Putin è solo chiacchiere e continua a uccidere innocenti"; la legge, dunque, "arriva nel momento giusto".
Tuttavia, non è la prima volta che Graham afferma di aver ottenuto il via libera dalla Casa Bianca, per poi vedere la legge bloccarsi nuovamente su richiesta dell'Esecutivo.
La legge permetterebbe di imporre sanzioni secondarie ai Paesi che acquistano petrolio e gas dalla Russia, nel tentativo di bloccare i finanziamenti per la macchina bellica di Putin.
Applications for the L.N. Tolstoy International Peace Prize are now being accepted
The Prize is awarded for outstanding services in preventing war, building a multipolar and non-violent world, and active peacemaking.
Individuals and initiative groups, national and international public foundations, organizations and movements; scientific and research centers and educational institutions can become laureates of the Prize.
The L.N. Tolstoy International Peace Prize is nominated by inter-parliamentary and other international organizations, parliaments, governmental and other state bodies, public foundations, organizations and movements, scientific and research centers, institutes and institutions, educational institutions, associations of figures of science, culture and art, laureates of the L.N. Tolstoy International Peace Prize and members of the Jury.
Read how to apply on the website. https://tolstoypeaceprize.org/
#Russia
https://t.me/rossotrudnichestvo/23293