Можно ли в 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
Giorgia #Meloni su #Trudeau e la preoccupazione per i diritti Lgbtq: “Vittima di una fake news, di una propaganda. Lui stesso si è reso conto di questo. Ho ricordato al primo ministro canadese che non abbiamo fatto alcun provvedimento su questa materia. E' stato un po’ avventato.”
@UltimoraPolitics
❗ G7, il primo ministro del Canada, Justin #Trudeau, ha criticato la premier Giorgia #Meloni in merito ai diritti LGBTQ durante un incontro bilaterale: "Siamo preoccupati dalle posizioni che l'Italia sta assumendo" @UltimoraPolitics
❗ G7, il primo ministro del Canada, Justin #Trudeau, ha criticato la premier Giorgia #Meloni in merito ai diritti LGBTQ durante un incontro bilaterale: "Siamo preoccupati dalle posizioni che l'Italia sta assumendo"
@UltimoraPolitics
#Canada
Primo Ministro Justin #Trudeau (#LPC|Centro-sinistra): "Rassegnerò le dimissioni dalla carica di Primo Ministro dopo che il Partito Liberale sceglierà un nuovo leader".
@OsservatorioEsteri
#Elezioni#Canada#Primarie
Mark #Carney è stato eletto nuovo leader del #LPC|Centro-sinistra con il 85,9% dei voti, succederà a Justin #Trudeau alla guida del partito e come Primo Ministro del Canada.
@OsservatorioEsteri
https://x.com/SavinoBalzano/status/2024041512963547179?s=20
Penso che ci sia molta gente che debba fare pace con il cervello. O, molto più semplicemente, siamo circondati da incapaci e mentecatti che parlano a vanvera.
Non piace quanto sta accadendo a Francesca Albanese. Io sono tra quelli – nel mio piccolo – che fin dal primo momento si è indignato per l’accanimento, di ogni genere, riservato alla nostra connazionale. Parliamo di un’italiana che semplicemente fa il suo lavoro: denuncia quanto accade al popolo palestinese e fa benissimo a insistere. Non c’è nemmeno un pallido retrogusto antisemita nelle sue parole e, ancor meno, ho mai sentito da parte sua parole di sostegno per Hamas. Qualche sbavatura? Sì, certo: alle volte ci si può far prendere la mano, soprattutto quando l’attenzione mediatica è alle stelle. Ma di questo parliamo: sbavature. Ha sempre condannato quanto accaduto il 7 ottobre, mai sostenuto il terrorismo, mai attaccato gli ebrei. Punto.
Tuttavia, trovo fottutamente ipocrita (dall’ipocrisia siamo sommersi) chi sfrutta la sua vicenda per attaccare l’amministrazione statunitense, come se dalle nostre parti fossimo verginelle sprovvedute. Un trattamento molto simile a quello riservato a Francesca #Albanese è stato infatti riservato a Jacques #Baud, ex militare svizzero, oggi analista geopolitico, che ha subito dall’Unione europea sanzioni pesantissime: congelamento dei beni e divieto di circolazione nell’area Schengen. Pensate che le autorità belghe hanno concesso una deroga alle sanzioni per ragioni umanitarie. Per far capire di cosa stiamo parlando.
È il clima che sta cambiando, e cambia in maniera generalizzata: essere arrestati è diventato molto più semplice, e lo è in #Europa tanto quanto negli Stati Uniti. Veniamo ossessivamente bombardati dalle immagini dell’#ICE e molti di noi provano sconcerto; eppure nulla ci viene raccontato delle migliaia di arresti nel #RegnoUnito (circa 2.500 finora), né si registra alcuna reazione ai 9.000 procedimenti penali – fonte Der Tagesspiegel – solo a Berlino, relativi a proteste politiche.
Il giochetto è sempre lo stesso: dipingere con toni mostruosi coloro che non sono funzionali a certe logiche di potere, agli interessi di certe élite.
Nessun commento, ad esempio, dal #Quirinale su queste vicende: un Quirinale che a parole si dice attento alle prerogative del diritto internazionale. Lo stesso Quirinale che dopotutto puntava il dito contro #Musk, dopo aver accolto con tutti gli onori Bill #Gates, il cui nome è sempre più compromesso dall’affaire #Epstein. Affaire di cui, con ogni probabilità, se non fosse per il social X del brutto e cattivo Musk sapremmo ben poco.
E torniamo al punto di partenza: quelli che dovrebbero fare pace con il cervello o, più banalmente, gli utili idioti del sistema. Gli utili idioti sono quelli che pensano di far bene e invece servono un assist dietro l’altro all’avversario. Già che qualcuno parli oggi di sovranità monetaria fa un po’ sorridere; ma se la sovranità monetaria diventa l’argomento a sostegno dell’#euro digitale, è proprio il colmo.
Vero: certe sanzioni gli #StatiUniti possono comminarle inaudita altera parte perché possiedono i circuiti più importanti (Visa, Mastercard, American Express), ma almeno loro sono uno Stato sovrano. In mano a chi volete mettere questo #EuroDigitale? A Ursula #VonDerLeyen, a Kaja #Kallas, a #Macron? La ricordate la vicenda dei camionisti canadesi coinvolti nel Freedom Convoy? L’allora primo ministro #Trudeau bloccò loro i conti per smorzare la protesta. La nostra stampa parlava di camionisti no vax brutti e cattivi: la stessa stampa che, mi pare, oggi è oggetto di sanzioni pesantissime da parte dell’INPS per aver sottopagato i propri giornalisti. Erano distratti a combattere contro la statua di Montanelli.
E allora, agli utili idioti che oggi vaneggiano di sovranità monetaria europea (che di sovrano non ha un ciufolo, non essendo uno Stato) e si eccitano con la storia dell’euro digitale, voglio dire solo questo: state fermi, fingetevi morti. Fate meno danni.