Можно ли в 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
🇷🇺🇺🇸 Kirill Dmitriev, le représentant spécial du président russe pour la coopération en matière d’investissements et d’économie avec les pays étrangers, s'est rendu aux pourparlers avec la délégation américaine.
#russie#étatsunis#miami
🇷🇺🇺🇸 Le représentant spécial du président russe pour la coopération en matière d’investissements et d’économie avec les pays étrangers, Kirill Dmitriev, a indiqué qu’il était de nouveau à Miami.
"De nouveau à Miami", a-t-il écrit sur Instagram (interdit en Russie), en joignant une photo de la trajectoire d’un avion approchant de l’État américain de Floride.
Plus tard, sur Instagram, il a posté une photo de la plage et du soleil se levant sur la mer, indiquant qu'il y était déjà arrivé.
#russie#étatsunis#miami
Резюме по Майами 🍍
Первый раз во Флориде (не на пересадке), первый раз в Майами. Приятно удивлен. Мне не очень интересна ночная жизнь города, поэтом есть ощущение, что я погрузился в атмосферу не полностью. Как будто бы клубы-бары-вечеринки являются важной частью города, но со стороны всё это выглядит красиво, ярко, красочно
Порадовала чистота Майами бич и в целом самого города. Оцениваю по местным критериям, но мне ощутилось как очень чистенькое местечно. Особенно туристическая часть города. Это, кстати, справедливо далеко не для всякого местного города
Порадовала гулябельность Майами бич. Был без машины, передвигались только на такси. Майами бич большой, без проблем можно гулять
Порадовали пляжи 🏝 Удалось посетить только центральные. Чисто, мало людей. То как должен выглядеть хороший пляж
Порадовала безопасность (по сравнению с Чикаго). Недели мало для статистики, но ощущения такие.
Циферки на Numbeo это подтверждают. По туристическим местам вечерами гуляли без оглядки, мало подозрительных личностей. Гуляли и в 9 и в 11 вечера. В Чикаго такой роскоши нет. Особенно на контрасте по возвращению ощущалась разница - пустые улицы вечером и в разы больше подозрительных людей днём. Связываю это с доступностью общественного транспорта (легко добраться в центр из бедного района)
Не порадовал общественный транспорт
🚌 Наверное, Чикаго один из пары городов где есть хоть какой-то доступный общественный транспорт. В Майами он, как минимум, постоянно опаздывает. Даже не стал пробовать
Не порадовала еда. Ели 80% вне дома. Ел и в ресторане и в кафешках. Пресновато, дороговато. Каждый раз стараюсь много времени уделять изучению мест где ем, но не помогло. Были завышенные ожидания в связи с тем, что в городе много латиносов. Возможно не повезло, после того как уехал в чатик скинули проверенные рекомендации. Попробую в следующий раз. Много туристических мест с накрученными рейтингами и сильно завышенными ценниками, приходится потрудиться чтобы найти что-то вкусное
Погода 😎 Вечерами и утром очень приятно находиться. Знаю тёплые места где даже вечером хочется застреллиться, здесь не так. Погода ощущалась мягкой. Застал пару сильных ливней. Появляются из неоткуда и уходят в никуда. Никакой прогноз погоды не помогает. Если говорит, что дождь будет 10 минут, то есть шанс, что будет сильный ливень 3 часа и потоп. В целом, погода скорее понравилась чем нет. На любителя
Раньше в моей голове Майами был чем-то фриковатым, там жило три типа людей: деды на яхтах, трясующие жопой девушки на Оушен Драйв и мужики с дробовиками в красных кепках MAGA на траках. Сейчас это миленькое чистенькое местечко куда даже приятно возвращаться
Последние несколько дней жизни в арендованной квартире на Airbnb я смотрел канал с вестернами. Посмотрел серий 10 Виргинийца🔫 Если хотите посмотреть хороший вестерн - советую. Я не мог остановиться
#Miami#FL
PortMiami носит название «Круизной столицы мира»
На южном пляже Майами бич можно наблюдать как приходят и отправляются самые большие круизные суда в мире: Royal Carribean, Norwegian, Virgin Voyagers и другие
Является главными торговыми воротами между США и Латинской Америкой
Из рукотворных вещей это, наверное, является одним из самых зрелищных для меня. Особенно поразили размеры грузовых судов
Забавно думать, что потом сотни этих контейнеров разгружают на траки и, возможно, какой-нибудь русскоязычный соотечественник повезёт какие-нибудь вещи через всю страну куда-нибудь в Нью-Йорк
#Miami#FL
Wynwood 🎈
Красочный район в центре Маями, украшенный различным стрит-артом. Ещё 20 лет назад был заброшенным промышленным районом со складами. Сейчас в нём большое количество галерей и креативных пространств
#Miami#FL
🥊 5th St. Gym
Первый день в Маями заканчиваю в клубе где тренировался Мухамед Али
Клуб был основан итальянцами Крисом и Анджело Данди. В клубе также тренировались Джордж Форман, Шугар Рэй Робинсон, Луис Родригес, Вилли Пастрано и другие чемпионы мира по боксу
Часок бокса, часок тайского бокса и на боковую. Занимайтесь спортом, друзья
#Miami#FL
Всем привет из Маями 🍍
Приехал только вчера, успел прогуляться только по Design District, маленькому микрорайону с дорогими брендами, и то только потому что рядом живу
Район со своим микроклиматом - накачанные парни на дорогих тачках, милосердные молодые флоридские девушки ухаживают за пожилыми богатыми пенсионерами. Район крутится на орбите эстетики онлифанса 🍒 Забавно понаблюдать за непривычными явлениями. Летний вариант центральной Москвы
При попытке заговорить с таксистом по дороге с аэропорта тот мне сразу сказал “no hablo ingless”, я попытался в испанский, но мы только неловко помолчали и поехали в тишине. Огромное испаноязычное сообщество, иногда кажется, что испанский тут основной язык
#Miami#FL