Можно ли в 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
🎙Der stellvertretende Direktor des Departments der Nichtverbreitung und Rüstungskontrolle des russischen Außenministeriums Konstantin Worontsow:
💬 Die Eskalation im Nahen Osten hat einen unkontrollierbaren Charakter angenommen und stellt einen schwerwiegenden Schlag gegen das Regime der nuklearen Nichtverbreitung dar. Unter dem Vorwand einer angeblichen Sorge um die Nichtverbreitung führen die USA und Israel bereits zum zweiten Mal in den letzten acht Monaten Bombardierungen gegen iranische zivile Nuklearanlagen durch, die unter den Garantien der Internationale Atomenergie-Organisation stehen.
💬 Die Behauptungen über eine angeblich militärische Dimension des iranischen Nuklearprogramms sowie über die Nichterfüllung der Verpflichtungen Teherans im Rahmen des Sicherungsabkommens mit der IAEO dienen als Vorwand für andere Zielsetzungen – den Sturz der legitimen Regierung und die Zerstörung der iranischen Staatlichkeit. Der gegen Teheran entfesselte Krieg untergräbt das Vertrauen in den Vertrag über die Nichtverbreitung von Kernwaffen und könnte andere Staaten dazu veranlassen, nach alternativen, nichtkonventionellen Mitteln zur Gewährleistung ihrer Sicherheit zu suchen. Wir verurteilen entschieden den von den USA und Israel eingeschlagenen destruktiven Kurs und fordern dessen unverzügliche Beendigung.
💬 Wir waren stets vom ausschließlich friedlichen Charakter des iranischen Nuklearprogramms überzeugt. Wir erkennen an, dass Teheran trotz der Angriffe seiner Verpflichtung gegenüber dem NVV treu bleibt.
💬 Als Vertragsstaat und einer der NVV-Depositarstaaten betrachtet Russland als bedingungslose Priorität, die Nachhaltigkeit des Vertrags aufrechtzuerhalten und sicherzustellen. Die Versuche, ihn zur Durchsetzung eigener Vorstellungen über die Weltordnung sowie zur Verfolgung politischer Ziele zu instrumentalisieren, die nichts mit Ziel und Gegenstand des Vertrags zu tun haben, sind inakzeptabel.
🔗Quelle
@RusBotschaft
#NVV#Iran
Aus dem Interview des russischen Außenminister Sergej Lawrow mit dem Nachrichtensender „Al-Arabiya“, 18. Februar 2026
Die USA haben den Iran, seine Atomobjekte, die unter der Kontrolle der Internationalen Atomenergie-Organisation (IAEO) stehen, früher schon angegriffen. Soweit wir wissen, waren die Risiken real. Nach den Angaben unserer iranischen Kollegen, ist die Lage momentan relativ stabil. Leider hat der Angriff der USA und Israels auf den Iran nicht nur physische Risiken verursacht, sondern auch die Autorität der IAEO und des Vertrags über die Nichtverbreitung von Kernwaffen (NVV), der, wie der Iran mehrmals betont hat, für das Land verbindlich bleibt, untergraben. Beispiellos war die Kontrolle der IAEO, besonders in den letzten Jahren, als der JCPoA unterzeichnet wurde. Der Iran wurde kein einziges Mal wegen der Verletzung des NVV oder seines Sicherungsabkommen mit der IAEO überführt.
Wir haben keinen Grund zu zweifeln, dass der Iran die aktuelle Situation auf der Grundlage der Einhaltung und Anerkennung der Prinzipien des NVV beilegen will.
Jetzt wurde in Genf bei der zwischen den USA und dem Iran wiederaufgenommenen Verhandlungen unter Vermittlung von Oman eine Idee aufgegriffen, dass der Iran überhaupt von seinen Rechten auf die Anreicherung von Uran zu allen Zwecken verzichten soll, und zwar entweder komplett, oder sein Raketenprogramm wesentlich einschränken und aufhören, jegliche politischen Kräfte in der Region zu beeinflussen. Dies ist völlig inkorrekt.
Die erste Forderung spricht dem NVV wider. Der Iran hat das Recht auf die friedliche Nutzung von Uran, was immer unter der strikten Kontrolle der IAEO stand. Die Internationale Atomenergie-Organisation hat nie festgestellt, dass das angereicherte Uran zu militärischen Zwecken genutzt wird. Als die USA aus der JCPoA ausgestiegen sind, hat der Iran angekündigt, dass er nicht mehr durch Einschränkungen gebunden ist und fing an, Uran auf einen höheren Grad anzureichern. In der Tat ist dies ein Thema, das besprochen werden sollte, da niemand eine plötzliche Weiterverbreitung von Kernwaffen wünscht. Der Iran erklärt sich bereit, zur rein zivilen Nutzung der Kernenergie unter Aufsicht der IAEO zurückzukehren.
Ich verfolge sehr aufmerksam die Reaktion der arabischen Staaten, der Golfmonarchien darauf, was in der Region geschieht. Niemand will neue Eskalationen. Allen ist klar, dass das ein Spiel mit dem Feuer ist. Die Signale, die die arabischen Staaten nach Washington senden, sind eindeutig: Sie rufen dazu auf, Zurückhaltung zu üben und nach Vereinbarungen zu suchen, die einerseits die legitimen Rechte Irans nicht beeinträchtigen und andererseits – einschließlich durch Überprüfungs- und Kontrollmaßnahmen – garantieren, dass der Iran ausschließlich friedliche Programme im Bereich der Urananreicherung verfolgt.
🔗 Quelle
@RusBotschaft
#Iran#IAEO#JCPoA#NVV