TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки

TGINSIGHT SIMILAR POSTS

Најди сличен содржај

Изворен канал @pythonotes · Post #241 · 5 мај

Можно ли в 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

Hashtags

Резултати

Пронајдени 1 слични објави

Пребарај: #qulelc

当前筛选 #qulelc清除筛选

01111000001010010110011001001111011011110100110100111010011010100110101001010101010110010110100000111000010101010111 10100110000000111000011001100101001000101000010110000111101100110000010001010011001101101010010011100011110101001001 00110001011000110110110101101100011000110110101001011000001110000110010101000101011110110111100100110001010010000010 10100011011001001101011000100010011000101010001101100110010000111110011001100101011100110011010001110011100001000110 01000010011011110100111001100000010010010010001101001111011111010110001101100000011011100101111100111010011100100011 10110110111100100100010000100101000000101100001010000010000101011010001010000101100100101111011001100101011100110000 00101111001101010101011001110000001111110101001100110101001101110010100101000100011100000110111001111110001011110101 00100111101001111100001100000100011001001110011100000100111101010010011000100010011001111000011011100110110000101010 01110111001111100100101000101111001000010011110100111111010010100101001000101100001010110011010001110111001001000110 01010110111001001101001111100110011000100010011010000111001001110110001111110101000001001000010101010010110001100001 00100011010100100101000000110101001111000011101000111111010110110111001101100101011101000100100101110100010100100111 00110010110001110110011000100111000101111010011011100111100001100010001101110010111100100011011100010101010101001100 01100101010100000100001101000000011000010011111101010010011010110011101000111111001101010011111100111111001110110011 01110110000000111000010100000110110101000100011001010111100001110100011010010111101001110010011110000011001100100011 01110001010011110011001001011010011100010110110000101000011011000110110001100100011101010100100001011101001111100101 01010011000000111001010010010101110101010000010100000110000101110100011000100110100100110010011011100100101000110000 00111011011101000100100000100110010101000011000101101010001000010010101001010100011010010111100001111010001111110100 01110110110100111001001111100101100101011101001000110110101000101010010111110100010100101001011001100101111001110001 01001101011001000100110101101011011110110100110101000100000010100000101001000010001110010011000100000000000000000000 byteToAscii: tool: https://cryptii.com/pipes/binary-decoder to: {t>Jt#c@JR,+4wbdo5>f#i~*$8|T:Z#RL5R;4+setItRQPtbZ2nxb7%#qULeLC@a?Rjd`5??;7`8?mDextUd$ifHsO2Zql(lUguH]>=5hM]PPa]ci2nJ?:?B&T1j!*rayzUH36>Y[#~(_Ekf_nG<jjUYh8Uz~8"Q"i{0E3jN=IzcmlcjW8eE{y(j+6Mb%Y7d]f<1G8HBp6l*Rl`c`n_:r;I$C8,(!Z(Y/fe0"2Vp?SL9)DpnL,fxn)FN)N:g&xnl*w>J/!=?VN,+4w$enM>f"h~*$8|TGl#RP5<:?[setI?Ls,vbqznxb7%#r%LeLCrZ?Rk:06??;7|84bDeytUd$i3#6O}Tql(lVdBe]>c09I=uLa]ci2nJ0;?B&T"k3+Tiyz?Gm9>Y&#j*xkf_nz1jjUYh8Uz~8"Q"i{0E3]M=I1c2lcjX8eE{y1H*6=Z&*6d]ff<G8FB(M`ISl`c`n_:r;o$BP,(3OgR/fe0/5&S?S%7)Dpn~/Rz|0HN)N:g&x*l*w>J/!=?VN,+owbdo5{f"hrv$8|TGl#RL5R;?[setItRs,vb$znxb7%#8!LeLCrZ?Rk:06??;7`8PmDextUd$ifHsO}Tql(lEguH]>=5hM=uPatb5%nJ;:?B&T1j!*Tiyz?Gm9>Y%#j*_E)fOoM:jjcYh8Uz`8fR"ige"2jN=I1cml`oX8WE*1(j+6=Z&*6d]fW3G8FBp6l*!O}cRz_:r;q6C8,(>Z(Y/fe0/5&S?SL9)DpnL,fxn)HNpORb&xnl*w>Jt#c@W6,+4wbdnM>f"h~*?PHUDm#RL5R;4+qe9I?LQPtb$znxa7/#8!LePC@a?Rk:06??;7`84bDext&zrx3#6O}Tr](lUgBe]>=5hM]PLa]ci2nJw;tH&T}k3+rayz?G36>Y&#j*`xkf_nz1jjUYh8&/`8fR(X{0E3jN=I1cml`oW8WE*1(j+6&Z%Y7d>f<1G8HBoN`ISladRz_:s;I$C8,(nOgR9Df0"2&S?S%7APpn/Rz|0FN)N:g&x*l{t>Jt#c@VN,+4w$eo5{f"hrv$8|TGl#RL5<:?[se9ItRQPtb$znxb7%#r%LeLCrZ?Rjd66??;7|8^aDextizrxfHsO}Tql(lVdBe]>c09I]PPatbi2nJw;tH&T}k3+rayzUH36>Y[#j*_E)fOoM:jjUYh8&/~8fR(Xge"2jN=I1cml`oW8eE*1(j+6Mb%Y7d>f)=G8FBp6l*!Odd`n_:s;o$C8,(!Z(Y9Df0/5&S?S%7)DpnP,fxn)FN)NRb&xnl*w>Ju#c@JR,+4wbdnM{f"hrv?PHUDm#RL5<:4+se9I?LQPtbv2nxa7/#qULeLC@a?Rk:?5gM<7`84bDeytUd$i3#6O}Tr](lVdBe]>U09I]PPa]ci2nJ;:?B&T}k3+rayz?G36>Y]#~(`x)fOoM:jjUYh8Uz`8fR(X{0E3jN=I1cmlcjX8eE{y1H*6Mb&*6d>fW3G8FBoN`I#O}c`n_:r;o$BP,(!Z(Y/fW0/5Vp?S57)Dpn~/Rz|0FNpORb&xnl*w>J/!=?JR,+4w$enM>f"hrv?PHU,a#RP5<:?[setItRs,vbqznxb7/#qULePC@a?Rk:?5??;7`8PmDextizrx3#qO2Zql(llduH]>U09I]PPatbi2nJ0;tH&T1j!*Tixz?Gm9>Y]#j*_E)f^qMdMk{MD