Можно ли в 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
#Albania
Il Parlamento albanese ha approvato una proposta di legge per legalizzare l’uso della cannabis a scopo terapeutico ed industriale.
L’obiettivo è quello di incrementare le entrate fiscali dello Stato.
@OsservatorioEsteri
Questa mattina Papa #LeoneXIV ha ricevuto in udienza Edi Rama, Primo Ministro della Repubblica d’#Albania, il quale ha successivamente incontrato il Cardinale Pietro Parolin, Segretario di Stato di Sua Santità, accompagnato da mons. Paul Richard Gallagher, Segretario per i Rapporti con gli Stati e le Organizzazioni Internazionali.
"Nei cordiali colloqui in Segreteria di Stato - fa sapere la Sala Stampa vaticana in una nota - si sono rilevati i buoni rapporti esistenti tra la Santa Sede e la Repubblica d’Albania e sono stati affrontati temi di comune interesse attinenti alle relazioni tra la comunità ecclesiale e quella civile. Nel prosieguo della conversazione, ci si è soffermati pure sulle principali questioni regionali, tra cui la situazione nei Paesi dei Balcani occidentali ed il cammino dell’Albania verso la piena integrazione nell’Unione Europea".
#video#Albania
We are sharing the moving story of one of Albania’s heroines. Lali was a beautiful girl who changed genders to become her family’s male protector, according to ancient Albanian tradition. She took a vow to be a burrnesha or sworn virgin. Check out our video to meet this extraordinary person.
Find out more about the ancient tradition in the film The Virgins.
Follow: https://t.me/rtdocumentary
#video#Albania
Bedri Gosteroni, 65, was born female, but she had to take on a man’s role after her brother’s death. As a result, she became a burrnesha or a sworn virgin. The word ‘burrnesha’ translates as ‘he-she’.
It’s a centuries-old tradition in northern Albania from the medieval canon of laws known as the Kanun. When the male heirs of a family died or were killed, a daughter could assume the role of patriarch by taking a vow of celibacy. So Burrnesha dress and live as men. They are very rare these days, and most people, even in Tirana, have never heard of them.
Take a journey across the mountains of Albania in search of burrneshas in the documentary, The Virgins.
Follow: https://t.me/rtdocumentary
#Albania🇦🇱
#Parlamentari
❓Come si vota in Albania?
Il sistema elettorale per l'elezione dell'Assemblea (Kuvendi) è di tipo proporzionale di lista, basato su divisore.
I 140 seggi sono allocati con il metodo D'Hondt ed è presente una soglia di sbarramento dell'1%.
Le liste sono semi-chiuse: la maggioranza dei seggi viene assegnata sulla base di liste bloccate, ma una parte può essere assegnata tramite voto di preferenza.
I seggi sono divisi su più circoscrizioni elettorali, che corrispondono alle prefetture; il numero dei seggi tra le circoscrizioni varia in base alla grandezza demografica.
@TuttoElezioni
Why did Albanian women have to pretend to be men?
#photo#Albania
Diana looks like an old man in a military beret, but she’s a burrnesha. That’s what they call Albania’s last sworn virgins, who made an oath of celibacy in exchange for leading the life of a man.
Diana’s brother died, so she took his place. Diana was a tomboy and had always stood up for her female neighbours. Albanian women invariably became burrneshas through social necessity, not because they were transgender or gay.
Some burrneshas agreed to live as men because their families had lost a patriarch. Others chose the path because it was just easier to live as men, who could own property, move freely, work, drink and smoke.
Happily, these days, Albanian women don’t have to become burrneshas to enjoy these freedoms. So the custom is all but dying out.
Follow: https://t.me/rtdocumentary
🇷🇸#Serbia – 🇦🇱#Albania: Footage has emerged showing Serbian paratroopers and helicopters being deployed over the Preševo Valley, near the border with Kosovo, as part of ongoing military exercises.
Authorities in Albania have issued a statement describing the drills as “dangerous” and “provocative,” claiming they may be intended to intimidate the Albanian-majority population in southern Serbia, particularly in areas close to the Kosovo border.
The region was previously affected by an insurgency that lasted for approximately two years between the Federal Republic of Yugoslavia and ethnic Albanian separatist groups from 1999 to 2001. Outbursts of violence reportedly continued between 2002 and 2014, including targeted attacks on police using grenades and mortars, as well as bombings of schools, amid tensions between ethnic Serb and Albanian communities.
(📹@balkanspectator & @admirim on X)
#Migraciones. Acuerdo entre #Italia y #Albania para que Albania externalice la gestión de refugiados que piden asilo o intentan llegar a la #UE
https://www.euractiv.com/section/politics/news/italy-albania-migration-deal-divides-both-sides-of-adriatic-caution-from-eu/
#Albania
L'attuale Capo di Stato Maggiore Generale Bajram #Begaj è stato eletto come Presidente dell'Albania con 78 voti a favore, 4 contrari e 1 astensione. Tutta l'opposizione tranne #LSI|Centro-sinistra (che ha votato contro) ha boicottato la votazione, sostenendo che il processo di scelta è stato irregolare. Begaj giurerà ed entra in carica il 24 luglio.
@UltimoraPolitics24