Можно ли в 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
#happier
...то есть, из-за того, что мне неловко писать на "сторонние темы", моё мимолётное увлечение пиратами пройдёт мимо моего блога? И в будущем, если я вдруг про него вспомню, то не найду ничего, что оставила бы себе же на память?
Снова клубок тем, но в первую очередь – "о чём писать можно, а о чём нельзя". В блоге я в основном думаю вслух, и думать пытаюсь о чём-то субъективно важном: пока пишу, часто переосмысляю свои же убеждения.
А потом:
"Ого, Wiktionary говорит, что греческое καραμέλα – это заимствованное итальянское caramella! ...стойте, а ведь Греция и Италия же сравнительно близко друг к другу..."
В случае же с пиратами получилось так, что желание безопасно и малозатратно пробовать новое совпало с более близким знакомством с Heroes of Might and Magic 3: Horn of the Abyss, где есть пираты, причём довольно крутые. Играть я устала через три дня (я играю в Героев уже ~17 лет, насколько помню, такое почти кому угодно надоест), но теперь то, что я делаю, я делаю под вариации морских песен. Например.
Тут есть и какое-то новое практическое знание, которым можно поделиться, но, кажется, формат "дельта на дельте" меня не только утомил, но и запер в узких рамках. Мне кажется, что нужно писать о чём-то, что читатели смогут использовать сами; в итоге мне самой тесно, потому что жизнь зачастую далеко не только про полезность.
С другой стороны, почему я говорю, что увлечение пиратами мимолётно: ему всего пара дней, и я специально не углубляюсь в тему – это всё действительно далеко от того, чем я обычно занимаюсь, и хотя мне интересно, я не хотела бы обменивать свои немногие ресурсы именно на эту тему среди всех остальных. В то же время музыка навевает дух приключений, который в реальной жизни у меня бывает очень редко – и мне действительно не хватает вдохновляющих штук.
И, как обычно, я не очень согласна заметать под ковёр вещи, от которых мои глаза загораются. Особенно если не соглашаюсь я сама с собой.
#happier
Сижу холодными зимними вечерами и рассказываю про Героев Меча и Магии, или про тропы, или про тропы в Героях Меча и Магии... :)
Мало пишу об этом, но в последнее время (не больше месяца-двух) я порой внезапно обнаруживаю у себя экспертность, которую ценю и в других.
Экспертность ощущается через "ого, оказывается, я знаю намного больше, чем думала". Как обычно, это не значит, что все остальные люди проживают это так же или что я всегда проживаю это именно так.
Да, скорее всего, я не буду выигрывать онлайн-турниры и не знаю и десятой части 31773 тропов на ТВТропах. Тем не менее я играла в Героев так много, что теперь пятая часть надоедает мне уже на главном меню, а на ТВТропах было проведено немало вечеров.
Но обычно я не ощущаю прогресс в таких вещах... Пока не начинаю о нём говорить кому-то ещё. Вдруг оказывается, что я помню намного больше деталей, чем думаю.
Мотивирует больше изучать темы, которые, кхм, ассоциируются у меня с работой; хочется больше положительного подкрепления такого рода. "Да, я знаю".
#happier
...так вот, теория категорий.
Думаю, весь дальнейший пост будет звучать весьма наивно/расплывчато из-за того, что я не очень разбираюсь в том, о чём говорю. Щито поделать.
Слова "я изучаю теорию категорий" из моих уст могут звучать довольно кринжово. Я, человек, в апреле заново проходивший логарифмы к ЕГЭ, вдруг интересуюсь одной из самых абстрактных областей в математике...
...но ведь потому и интересно: я могу не очень хорошо считать, но я люблю находить паттерны и смотреть на происходящее с пост-пост-мета-мета позиции. "Пусть сначала сломается" (с) – не хочу откидывать интересное только потому, что люди с моим уровнем обычно его не понимают; а если не пойму сама, то всегда смогу задать себе вопрос "почему?" и пойти гуглить точечно.
Поиск паттернов, в свою очередь, вызывает у меня мысли о дискурс-анализе. Я не знаю, определились ли исследователи с тем, что такое "дискурс"; я его интерпретирую скорее как совокупность высказываний различных форм и содержания, а дальше, кхм, становится сложнее.
Для меня одна из самых захватывающих штук в дискурс-анализе – это попытка обнаружить то, о чём автор не говорит явно. Почему люди пишут так, как пишут? Потому что так принято, потому что они не имеют возможности сказать прямо? И ведь по сей день некоторые древние тексты переведены, но до сих пор не расшифрованы до конца – нужный культурный контекст уже утерян, а метафоры и прочее остались.
А потом я начинаю поглядывать на Eliciting Latent Knowledge – одну из открытых проблем AI Safety. На суперрукомахательном уровне – "допустим, ИИ владеет некой информацией, которую он не сообщает людям в ответ на запрос; как понять, что ИИ недоговаривает/лжёт?".
Я не знаю, насколько социальные и прочие факторы влияют на обучение ИИ, но сама эта задача – "вытащить наружу некое неявное знание" – всё ещё звучит интересно, хотя я ожидаю, что методы дискурс-анализа тут вряд ли будут хорошо работать.
И, что занятно: узкие, конкретные исследовательские вопросы и области могут сильно различаться, но общие, широкие вопросы и закрываемые ими потребности могут быть одинаковыми.
И, немного в сторону: даже если выяснится, что все эти области выглядят не так, как я думаю сейчас, когда я знаю о них лишь понаслышке, – ничего страшного. Я могу понять, что это не моё, и пойти закрывать общие интересы другими способами; могу полюбить эти сферы за что-то ещё. Мои новичковые, наивные представления о том, как работает мир – это не те убеждения, за которые я хочу держаться дольше необходимого.
#happier
Тем временем коллеги из Сербии открыли новый AI Safety коворкинг в Белграде. 🎉
Я сама вряд ли там буду в обозримом будущем, но если вдруг кто-нибудь искал такое AIS/EA/LW-сообщество — вот оно! :з
Вчера хотела написать ещё пост про штуки, которые меня радуют, но "я и так уже написала две стены текста и третью репостнула — да, укладываюсь в свой же лимит 5 постов/день, но куда ещё одну такую же".
Но! В последнее время потихоньку становится лучше эмоционально, и хочется хотя бы немного сместить акценты.
Проблемы из жизни не исчезают — но я постепенно становлюсь радостнее.
#happier
#happier
...я писала пост, который начинался как-то так и должен был иметь какой-то такой посыл:
Недавно я пережила кризис веры и глубокий провал в мотивации, поэтому уже неделю-две как читаю и смотрю в первую очередь то, что интересно именно мне — даже если оно напрямую не связано с рациональностью, эффективным альтруизмом или AI Safety.
Я считаю, что знания из других областей всё равно полезны, даже если это не то, чем я занимаюсь на постоянной основе — и любопытство не враг мне.
...поэтому теория категорий.
Почему вы сейчас читаете (если, конечно, вы обновили тг до последней версии) именно этот пост, а не тот? Потому что я ставлю ссылки на источники, и в этом случае источник — эссе Юдковского "Кризис веры"...
...которое, оказывается, я не читала дальше первого абзаца и которое вообще не про то, что я хотела написать.
Но я прочитала — и это эссе, а потом ещё одно (надо ставить ссылки на источники! ой, это короткое и выглядит интересно, пусть будет ещё одно).
Здесь можно было бы выйти на что-нибудь поучительное вроде "Чекайте источники" -> "Не ограничивайтесь чем-то одним, если вам любопытны и другие вещи", но на самом деле мне хотелось поделиться радостью.
Увы, в последнее время я не очень много радуюсь и ещё меньше об этом пишу — но даже в лучшие времена не так уж много вещей заставляет меня встать со стула и пойти танцевать.
Всё-таки источник не виноват в том, что я долго читала именно его — он не теряет своей полезности от этого.
Но, зная, что я не хочу (а, быть может, и не могу) поглощать так много материала за один присест, я разрешаю себе свободно плавать и изучать разное — зная, впрочем, что у меня есть Цель, ради которой я вплетаю отдельные ниточки в цельное полотно своей картины мира.
И иногда я возвращаюсь — со свежим взглядом, с новыми знаниями и опытом — и обнаруживаю, что мне всё ещё интересно. И что мотивацией тоже можно управлять.
Happier - Olivia Rodrigo ('60s Girl Group Style) ft. Allison Young
2022-03-04 by PostmodernJukebox
#OliviaRodrigo#Happier#OliviaRodrigocover#Happiercover#OliviaRodrigoHappier#HappierOliviaRodrigo#OliviaRodrigoHappiercover
#YouTube#liked