Можно ли в 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
Шумит над вами желтая листва,
Друзья мои, — и порознь вы, и вместе,
А все-таки достаточно родства
И таинства — для горести и чести.
И празднества старинного черты,
Где радости нам выпало так много,
С годами точно светом налиты,
И верю я, что это вот — от Бога.
Пред утренним туманом этажи
Нам брезжили в застойные годины, —
Кто пил, как мы? — попробуй завяжи,
Когда не все ли, в общем-то, едино!
Кто выжил — цел, — но сколько вас в земле,
Друзья мои, — и с кем ни говорю я,
О вас — в толпе, в хандре, навеселе,
В беспамятстве оставленных — горюю.
И ветер налетающий, застыв,
Приветствую пред осенью свинцовой,
Немотствующий выстрадав мотив
Из лучших дней, приправленных перцовой.
Отшельничать мне, други, не впервой —
Впотьмах полынь в руках переминаю.
Седеющей качая головой,
Чтоб разом не сгустилась мгла ночная.
Владимир Алейников
#jugaat#poetry#aleynikov
В пальто обшарпанном,
изранен и упрям,
Не ты ли рощу видывал нагую,
Что листьев ждёт,
открытая ветрам,
А ночь ведёт,
подобно входу в храм,
Хранящий нашу веру дорогую.
Не укротить стремление уздой –
И если век,
что начат столь крылато,
Не упадёт падучею звездой,
Быть может,
ты поднимешься когда-то
Над рощей мартовской,
как месяц молодой.
Владимир Алейников
#jugaat#poetry#Aleynikov
Я побеждён самим собой.
Устал.
И небо угасает.
Пора уже, пора…
Постой!
Вгляделся вдаль — а там светает.
Свой крест всё тяжелей нести.
А память свод грехов листает.
Жизнь прожита, почти…
Почти!
Вперёд вгляжусь — а там светает.
Прошли и высохли дожди,
Снег падает и снова тает.
Казалось, темень впереди.
Но вот вгляжусь — а там светает!
Александр Володин
#jugaat#poetry#volodin
А между прочим, осень на дворе.
Ну что ж, я вижу это не впервые.
Скулит собака в мокрой конуре,
Залечивая раны боевые.
Бегут машины, мчатся напрямик
И вдруг с ухаба шлёпаются в лужу.
Когда, буксуя, воет грузовик,
Мне этот вой выматывает душу.
Кругом шумит холодная вода,
И всё кругом расплывчато и мглисто,
Незримый ветер, словно в невода,
Со всех сторон затягивает листья...
Раздался стук. Я выдернул засов.
Я рад обняться с верными друзьями.
Повеселились несколько часов,
Повеселились с грустными глазами.
Когда в сенях опять простились мы,
Я первый раз так явственно услышал,
Как о суровой близости зимы
Тяжёлый ливень жаловался крышам.
Прошла пора, когда в зелёный луг
Я отворял узорное оконце –
И все лучи, как сотни добрых рук,
Мне по утрам протягивало солнце...
Николай Рубцов
#jugaat#poetry#rubtsov
Очень больно
(по мотивам Аттилы Йожефа)
Когда душа
Во мраке мечется, шурша,
Как обезумевшая крыса,
Ищи в тот миг
Любви спасительный тайник,
Где от себя можно укрыться.
В огне любви
Сгорят злосчастия твои,
Все, что свербило и болело,
Но в том огне
С проклятой болью наравне,
Имей в виду, сгорит и тело.
И если ты
Платить не хочешь горькой мзды
И от любви бежишь в испуге
Тогда живи,
Как жалкий зверь, что акт любви
Легко справляет без подруги.
Пусть ты сожжен,
И все ж — хоть мать пытай ножем!
Покой души в любви и вере.
Но та, к кому
Я шел сквозь холод, грязь и тьму,
Передо мной закрыла двери.
И боль во мне
Звенит цикадой в тишине,
И я глушу ее подушкой,
Так сирота
С гримасой плача возле рта
Бренчит дурацкой погремушкой.
О есть ли путь,
Чтоб можно было как-нибудь
Избавить душу от смятенья?..
Я без стыда
Казнил бы тех, чья красота
Для окружающих смертельна!..
Мне ль, дикарю,
Носить пристойности кору,
Что именуется культурой?..
Я не хочу
Задаром жечь любви свечу
Перед божественною дурой!..
Дитя и мать
Вдвоем обязаны орать —
Всегда двоим при родах больно!
Во тьме дворов,
Рожая нищих и воров,
Вы, женщины, орите: больно!
В чаду пивных,
Стирая кровь с ножей хмельных,
Вы, мужики, орите: больно!
И вы, самцы,
Уныло тиская соски
Постылых баб, — орите: больно!
И вы, скопцы,
Под утро вешаясь с тоски
На галстуках, — орите: больно!
Ты, племя рыб,
С крючком в губе ори навзрыд,
Во все немое горло: больно!
Моя же боль
Сильней означенной любой,
Ее одной на всех довольно.
И тот из вас,
Кто ощутит ее хоть раз,
Узнает, что такое «больно»!
Ты, майский жук,
Что прянул точно под каблук,
Всем малым тельцем хрустни: больно! Ты, добрый пес,
Что угодил под паровоз,
Кровавой пастью взвизгни: больно! Пусть адский хор,
Растущий, как лавина с гор,
Ворвется грозно и разбойно
К ней в дом — и там,
Бродя за нею по пятам,
Орет ей в уши: очень больно!
И пусть она,
Разбита и оглушена,
Поймет среди орущей бойни,
Что не любви
Пришел просить я, весь в крови,
А лишь спасения от боли…
Леонид Филатов
#jugaat#poetry#filatov
Романс Скрипача
Тогда, когда любовей с нами нет,
тогда, когда от холода горбат,
достань из чемодана пистолет,
достань и заложи его в ломбард.
Купи на эти деньги патефон
и где-нибудь на свете потанцуй
(в затылке нарастает перезвон),
ах, ручку патефона поцелуй.
Да, слушайте совета Скрипача,
как следует стреляться сгоряча:
не в голову, а около плеча!
Живите только плача и крича!
На блюдечке я сердце понесу
и где-нибудь оставлю во дворе.
Друзья, ах, догадайтесь по лицу,
что сердца не отыщется в дыре,
проделанной на розовой груди,
и только патефоны впереди,
и только струны-струны, провода,
и только в горле красная вода.
Иосиф Бродский, 1961 г.
#jugaat#poetry#brodsky
Гонит ветер туч лохматых клочья,
снова наступили холода.
И опять мы расстаемся молча
так, как расстаются навсегда.
Ты стоишь и не глядишь вдогонку.
Я перехожу через мосток...
Ты жесток жестокостью ребенка
от непонимания жесток,
Может, ни день, может, ни год целый эта боль мне жизнь укоротит.
Если б знал ты подлинную цену
всех твоих молчаний и обид!
Ты бы позабыл про все другое,
ты схватил бы на руки меня,
Поднял бы и вынес бы из горя,
как людей выносят из огня.
Вероника Тушнова
#jugaat#poetry#tushnova
Благодарю за всё. За тишину.
За свет звезды, что спорит с темнотою.
Благодарю за сына, за жену.
За музыку блатную за стеною.
За то благодарю, что скверный гость,
я всё-таки довольно сносно встречен -
и для плаща в прихожей вбили гвоздь,
и целый мир взвалили мне на плечи.
Благодарю за детские стихи.
Не за вниманье вовсе, за терпенье.
За осень. За ненастье. За грехи.
За неземное это сожаленье.
За бога и за ангелов его.
За то, что сердце верит, разум знает.
Благодарю за то, что ничего
подобного на свете не бывает.
За всё, за всё. За то, что не могу,
чужое горе помня, жить красиво.
Я перед жизнью в тягостном долгу,
и только смерть щедра и молчалива.
За всё, за всё. За мутную зарю.
За хлеб. За соль. Тепло родного крова.
За то, что я вас всех благодарю,
за то, что вы не слышите ни слова.
Борис Рыжий
#jugaat#poetry#ryzhiy
Пока Земля еще вертится,
пока еще ярок свет,
Господи, дай же ты каждому,
чего у него нет:
мудрому дай голову,
трусливому дай коня,
дай счастливому денег…
И не забудь про меня.
Пока Земля еще вертится —
Господи, твоя власть! —
дай рвущемуся к власти
навластвоваться всласть,
дай передышку щедрому,
хоть до исхода дня.
Каину дай раскаяние…
И не забудь про меня.
Я знаю: ты все умеешь,
я верую в мудрость твою,
как верит солдат убитый,
что он проживает в раю,
как верит каждое ухо
тихим речам твоим,
как веруем и мы сами,
не ведая, что творим!
Господи мой Боже,
зеленоглазый мой!
Пока Земля еще вертится,
и это ей странно самой,
пока ей еще хватает
времени и огня,
дай же ты всем понемногу…
И не забудь про меня.
Булат Окуджава
#jugaat#poetry#Okudzhava
Не верь, что я забыл родные наши горы,
Густой, безоблачный, глубокий небосвод,
Твои задумчиво-мечтательные взоры
И бедный наш аул, и бедный наш народ.
Нет, друг мой, никогда! Чем тягостней изгнанье,
Чем дальше я от вас, чем бессердечней враг,
Тем слаще и милей мне грезится свиданье
Со всем, мне дорогим в родных моих горах.
Не бойся за меня!— Я не способен к мщенью,
Но злу противиться везде присуще мне,—
Не бойся!— я и здесь не дамся оболыценью
Красавиц, чуждых мне по крови и стране...
Люблю я целый мир, люблю людей, бесспорно,
Люблю беспомощных, обиженных, сирот,
Но больше всех люблю, чего скрывать позорно? —
Тебя, родной аул и бедный наш народ.
За вас отдам я жизнь... все помыслы и силы,—
Всего себя лишь вам я посвятить готов...
Вы так мне дороги, так бесконечно милы,
Что сил нет выразить, что высказать нет слов!..
Коста Хетагуров, 1896 г.
#jugaat#poetry#khetagurov