Можно ли в 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
Привет! Данияр на связи.
Поделюсь планами на следующие 3 года. Планы есть планы, это не обещания, они могут меняться, но на сегодня я вижу раскрытие вселенной в таком порядке. В скобках месяц завершения книги, ориентировочный, разумеется. Все это, конечно, довольно оптимистично для меня, но я постараюсь писать чаще и больше, чтобы уложиться в сроки, но не потерять в качестве.
• Крафтер-2 (ноябрь 2023)
• Сидус-3 (декабрь 2023)
• Дисгардиум-12.2 (декабрь 2023)
• Дисгардиум-12.3 (март 2024)
• Нокаут-3 (в соавторстве с Максом Лагно, 2024)
• Сидус-4 (апрель 2024)
• Крафтер-3 (май 2024)
• 99 мир — 3 (июль 2024)
• Кирпичи 3.0 (август 2024)
• Мета-2 (октябрь 2024)
• 99 мир — 4 (декабрь 2024)
• 99 мир — 5 (февраль 2025)
• Жатва душ — 2 (апрель 2025)
• Жатва душ — 3 (июль 2025)
• Мета-3 (сентябрь 2025)
• Селекция-1
• Селекция-2
• Селекция-3
• Второй мир — 1
• Второй мир — 2
• Второй мир — 3
«Нокаут-3» больше зависит от Макса, ему интересно, но у него свои серии. Как оба найдем время, расскажем историю от «Кирки» до «Сноусторма» + расскажем о Третьей мировой.
«Селекция» пока без точных сроков, зависит от того, как пойдут другие серии и вашего интереса. «Второй мир» — продолжение истории Луки Децисиму в новом мире. Название рабочее, потому что может так случиться, что это будет совершенно отдельная серия.
Так же я сейчас могу недооценивать свою графоманию и ошибиться в количестве томов серий.
#планы#levelup
Создай карту своих достижений
Для того, чтобы повысить свою мотивацию, особенно в сложные периоды жизни, хорошо заиметь карту достижений.
Делается она так:
📎Возьми лист бумаги, ручки, карандаши, маркеры. Хорошо, если ты знаешь, что такое mind map, можно воспользоваться таким сервисом.
📎Прочерти длинную линию и разбей ее на временные периоды (по 10 лет, по 5 или даже меньше).
📎После этого вспомни все свои достижения на каждом этапе жизни и нанеси их на бумагу.
📎К каждому пункту добавь слова или картинки, которые связаны именно с этим событием. Используй цветные маркеры!
📎Держи карту на видном месте. И в тот момент, когда все будет валиться из рук, или покажется, что все идет не так, она будет напоминать тебе, сколько всего ты уже смог достичь!
#levelup#improvingyourself
@selfdeprules
🔥 BU O‘YIN EMAS — BU PORTLASH.
2 kunlik adrenalin.
Cheksiz gaming.
Haqiqiy battle.
⚡ Bu yerda tomoshabin va faqat o‘yinchilar bor.
⚡ Bu yerda tasodif yo‘q — faqat mahorat gapiradi.
⚡ Bu yerda oddiylik yo‘q — faqat shov-shuv.
🚀 Sahna tayyor. Maydon qiziyapti.
SEN QACHON CHIQASAN?
—————————
🔥 THIS ISN’T A GAME — IT’S AN EXPLOSION.
2 days of adrenaline.
Unlimited gaming.
Real battles.
⚡ No spectators — only true players.
⚡ No luck — only skill speaks.
⚡ Nothing ordinary — only pure hype.
🚀 The stage is set. The arena is heating up.
WHEN DO YOU STEP IN?
#GameFest2026#LevelUp#BattleMode
🎮 Attention Gamers! 📸 Big 200 Go!Bots giveaway!! Capture Epic Moments and Win Big! 🏆
📢 Get ready for the ultimate gaming challenge! Introducing the 🌟 EA Games Screenshot Challenge 🌟 brought to you by Health Hero. 🎉 Show off your gaming skills, share your most jaw-dropping EA Games screenshots, and earn 💪 Health Hero rewards!
Starts: Tuesday, June 20, 2023
Ends: Tuesday, June 23, 2023
📸How to participate? Visit https://zealy.io/c/healthhero-7008/questboard to get your quests started!
📢 Don't wait! Grab your gaming gear, start snapping those jaw-dropping screenshots, and let the gaming magic begin! 🚀✨
📢 Disclaimer: This challenge is purely for gaming enthusiasts and is not endorsed or affiliated with EA Games. It's all about celebrating our shared love for gaming and having a blast together!
🎮📸#GamingHeroes#EAGameScreenshotChallenge#HealthHero#CaptureTheMoment#LevelUp#GameOn
@Axenia_Bot
Qué puede hacer este bot?
Este bot puede contar los puntos de karma en grupos. Escriba '+' para subir o '-' para reducir puntos al usuario que responde.
Idioma: Inglés, Ruso, Ucraniano, Uzbeco, Turco
(visto en @BotsGram_cu)
#karma, #ranking, #points, #toplist, #stats, #statistic, #inline, #levelup, #group, #top, #analytic, #statistics, #statistics, #member, #member, #groups, #activity