@GenshinNull · Post #5236 · 07.07.2023 г., 17:40
source@GenshinNull#Crepe [4.0 beta] 枫丹水下潜泳时的角色姿态 (以珊瑚宫心海为例) 所有角色潜泳时下身和臀部都会被覆盖一层马赛克
Hashtags
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
Пребарај: #crepe
@GenshinNull · Post #5236 · 07.07.2023 г., 17:40
source@GenshinNull#Crepe [4.0 beta] 枫丹水下潜泳时的角色姿态 (以珊瑚宫心海为例) 所有角色潜泳时下身和臀部都会被覆盖一层马赛克
Hashtags
@GenshinNull · Post #4949 · 15.04.2023 г., 16:03
source@GenshinNull#memetrollsXD#Crepe [3.7 beta] 绮良良(Kirara)元素爆发产生的猫草豆蔻可被枫原万叶的技能牵引. 00:10 ~ 00:22 正片 发布于 Crêperie Discord.
Hashtags
@GenshinNull · Post #4948 · 15.04.2023 г., 16:02
source@GenshinNull#memetrollsXD#Crepe [3.7 beta] 绮良良(Kirara)佩戴原木刀对战奇怪的丘丘人演示 00:14 ~ 01:01 角色界面及配装面板 01:03 ~ 01:11 普通攻击 / 重击 01:16 ~ 01:19 点按元素战技(E) 01:19 ~ 01:24 元素爆发(Q) 01:24 ~ 01:35 长按元素战技(E) 01:35 ~ 02:10 连续战斗演示 发布于 Crêperie Discord. 注: 视频中并未展示绮良良元素战技产生的护盾.
Hashtags
@MrDoItYourself · Post #8644 · 08.07.2024 г., 02:15
Pink flowers 🌹#handmade DIY #crepe paper rose #There is always someone holding a bouquet of flowers for you @mrdoityourself🌹🌹🌹