Можно ли в 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
Ассаламу Алайкум, дорогие друзья!
Республиканское общественное движение «Турпалхой» искренне поздравляет Главу ЧР, Героя России Рамзана Ахматовича Кадырова с присвоением ему звания «Герой Чеченской Республики»!
Рамзан Ахматович подтверждает свой героизм на протяжении многих лет у руководства региона. Благодаря его стратегически точным и важным решениям чеченский народ обрел мир и порядок на своей земле. Рамзан Ахматович сумел уничтожить до последнего представителей международного терроризма, которые десятки лет сеяли хаос и разрушения на чеченской земле. В связи с этим, звание «Герой Чеченской Республики» нашло своего заслуженного и достойного обладателя.
Желаем Вам, Рамзан Ахматович, терпения, сил и успехов в Вашем нелегком деле! Вы - настоящий ТУРПАЛХО и весь чеченский народ Вами гордится!
#AkhmadHadji
#Warrior
#Turpalkhoy
#Chechnya
#Grozny
#Heroes
#Кадыров
#АхматХаджи
#Воин
#Турпалхой
#Чечня
#Грозный
#Герои
Наши бойцы всего за пару недель заставили в страхе зашевелиться весь мир. Враги наши делают все, чтобы ослабить наших бойцов… откуда им, дуракам, знать, что мужество и отвага невозможно ослабить и что наши бойцы не остановятся ни перед чем, чтобы выполнить приказ!
#100ЛЕТЧЕЧЕНСКОЙГОСУДАРСТВЕННОСТИ
#AkhmadHadji
#Warrior
#Turpalkhoy
#Chechnya
#Grozny
#Heroes
#Кадыров
#АхматХаджи
#Воин
#Турпалхой
#Чечня
#Грозный
#Герои
Президент России Владимир Владимирович Путин - тот человек, который остановил войну в ЧР, принес мир и каждый день заботился о том, чтобы этот мир сохранить. Человек, который своими словами и делами возвысил имидж нашего региона и религии. И идти за таким человеком для нас огромная гордость!
#100ЛЕТЧЕЧЕНСКОЙГОСУДАРСТВЕННОСТИ
#AkhmadHadji
#Warrior
#Turpalkhoy
#Chechnya
#Grozny
#Heroes
#Кадыров
#АхматХаджи
#Воин
#Турпалхой
#Чечня
#Грозный
#Герои
За правое дело хочется смиренно жить или же достойно умереть! Ты знаешь, что при любом исходе, ты был прав. Посему ты можешь себе позволить пошутить, посмеяться самому, а если требуется не моргнув глазом рискнуть всем.
#100ЛЕТЧЕЧЕНСКОЙГОСУДАРСТВЕННОСТИ
#AkhmadHadji
#Warrior
#Turpalkhoy
#Chechnya
#Grozny
#Heroes
#Кадыров
#АхматХаджи
#Воин
#Турпалхой
#Чечня
#Грозный
#Герои
Более двух десятков лет Глава ЧР, Герой России Рамзан Ахматович Кадыров и словом и делом доказал, что народ и его благополучие для неё в приоритете над всем остальным! Он столько лет так самоотверженно вел за собой народ, что теперь, любой чеченец, встанет за него горой и без сомнения не пожалеет своей жизни за его безопасность!
#100ЛЕТЧЕЧЕНСКОЙГОСУДАРСТВЕННОСТИ
#AkhmadHadji
#Warrior
#Turpalkhoy
#Chechnya
#Grozny
#Heroes
#Кадыров
#АхматХаджи
#Воин
#Турпалхой
#Чечня
#Грозный
#Герои
Наши опытные бойцы всегда пребывают в особом расположении духа перед каждым сражением. Когда враг думает как спасти свою жизнь, наши бойцы думают как истребить врага ни капли не переживая за свою. В этом мы отличаемся от бандеровщины и подобной швали.
#100ЛЕТЧЕЧЕНСКОЙГОСУДАРСТВЕННОСТИ
#AkhmadHadji
#Warrior
#Turpalkhoy
#Chechnya
#Grozny
#Heroes
#Кадыров
#АхматХаджи
#Воин
#Турпалхой
#Чечня
#Грозный
#Герои
Это нужно какой подлой и низкой падалью быть, чтобы звонить родственникам солдат и сообщать об их гибели, зная, что они в здравии, но не могут сами выйти на связь. Во все времена, люди даже за большие деньги отказывались сообщать такое родственникам когда это на самом деле было правдой. До чего же вы низко пали! Конечно, вы бы хотели чтобы наши бойцы ушли в праведный мир, но убегая с поля боя вы ничего не добьётесь! У вас нет мужества открыто вести вражду, так вы опустились до уровня телефонных пранкеров! Вы не воины, вы просто пранкеры!
#100ЛЕТЧЕЧЕНСКОЙГОСУДАРСТВЕННОСТИ
#AkhmadHadji
#Warrior
#Turpalkhoy
#Chechnya
#Grozny
#Heroes
#Кадыров
#АхматХаджи
#Воин
#Турпалхой
#Чечня
#Грозный
#Герои
Если хотите знать, что значит «миротворческая операция», то посмотрите как себя ведут наши бойцы в зоне боевых действий. Как их только не называет запад, а в действительности же мы видим, что эти молодые ребята спасают жизни людей! Сколько уже спасено жизней и сколько предстоит еще?! Наши бойцы, это когда через всю страну привозят мать к своим детям, когда на руках вытаскивают раненых, когда вокруг идут взрывы, когда рискуют собой ради тех, чьих имён даже не знают! Это и есть наша спецоперация!
#100ЛЕТЧЕЧЕНСКОЙГОСУДАРСТВЕННОСТИ
#AkhmadHadji
#Warrior
#Turpalkhoy
#Chechnya
#Grozny
#Heroes
#Кадыров
#АхматХаджи
#Воин
#Турпалхой
#Чечня
#Грозный
#Герои
Метр за метром наши бойцы очищают территории Украины от неонацистов и от подобной им швали! Они настолько четко делают свою работу, настолько опережает их слава, что, куда бы они не пришли, они находят, что враг бросил всю технику и просто сбежал! Когда как враги их воюют фейками, эти мужчины рвутся в настоящий бой, но нигде не могут найти врага!
#100ЛЕТЧЕЧЕНСКОЙГОСУДАРСТВЕННОСТИ
#AkhmadHadji
#Warrior
#Turpalkhoy
#Chechnya
#Grozny
#Heroes
#Кадыров
#АхматХаджи
#Воин
#Турпалхой
#Чечня
#Грозный
#Герои
Путь Ахмат-Хаджи - это образ жизни, идеология, стремление к миру и добру.
Других интересов у члена этой команды не должно быть.
#Kadyrov
#AkhmadHadji
#Warrior
#Turpalkhoy
#Chechnya
#Grozny
#Heroes
#Кадыров
#АхматХаджи
#Воин
#Турпалхой
#Чечня
#Грозный
#Герои