Можно ли в 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
🌎 The African buffalo, also known as Cape buffalo, is responsible for more deaths in Africa than most other large animals. Adult males can weigh up to 900 kilograms and have powerful horns, making them extremely dangerous when threatened. Herds can number in the hundreds and will defend injured members against predators, including humans. ✨
#wildlife⚡#mammals⚡#danger
👉subscribe Interesting Planet
👉more Channels
🌎 Mosquitoes are responsible for more human deaths than any other animal on Earth. They transmit diseases like malaria, dengue, Zika, and yellow fever, causing over 700,000 deaths each year worldwide. Some mosquito species can breed in just a bottle cap of water. ✨
#animals⚡#danger⚡#mosquitoes
👉subscribe Interesting Planet
👉more Channels
🌎 The assassin bug, found in tropical and subtropical regions, can inject a powerful enzyme that liquefies the insides of prey. Some species can also deliver painful bites to humans that may trigger allergic reactions. Assassin bugs are responsible for transmitting Chagas disease, which affects millions in Central and South America each year. ✨
#animals⚡#danger⚡#bites
👉subscribe Interesting Planet
👉more Channels
🌎 The mosquito is considered the deadliest animal on Earth, causing over 700,000 human deaths each year. Mosquitoes spread malaria, dengue, Zika, yellow fever, and other life-threatening diseases across tropical and subtropical regions, making them a major global health threat. ✨
#animals⚡#danger⚡#diseases
👉subscribe Interesting Planet
🪐 The asteroid (137108) 1999 AN10 is an Apollo-type near-Earth object roughly 800 meters wide, and its orbit brings it close enough to Earth every few decades that scientists label it as potentially hazardous. Current calculations predict an especially close approach in 2027, when it will pass within about 390,000 kilometers—almost the same distance as the Moon—making it one of the larger asteroids to come so near our planet in the 21st century. ✨
#asteroids⚡#danger⚡#nearEarth⚡#nasa⚡#galaxy⚡#stars⚡#astronomy⚡#universe⚡#cosmos⚡#space
👉subscribe Universe Mysteries
🌎 Saltwater crocodiles are among the most dangerous animals on Earth. These massive reptiles can exceed 6 meters in length and have the strongest recorded bite force of any living animal—over 16,000 newtons. Saltwater crocodiles are responsible for hundreds of attacks on humans annually throughout Southeast Asia and northern Australia. ✨
#crocodile⚡#danger⚡#reptiles
👉subscribe Interesting Planet
👉more Channels
🌎 Hippos are among the most dangerous large animals in Africa, causing more human deaths annually than lions. Territorial males can attack boats and move surprisingly fast on land, reaching speeds of up to 30 kilometers per hour. ✨
#hippo⚡#wildlife⚡#danger
👉subscribe Interesting Planet
🪐 The asteroid (7335) 1989 JA is classified as a "potentially hazardous asteroid" because it's over 1.8 kilometers wide and its orbit brings it close enough to Earth to be watched carefully by astronomers. In 2022, it made a safe pass at about 4 million kilometers from our planet, but its great size means that any future close approach will always be closely monitored for any change in its path. ✨
#asteroids⚡#danger⚡#nearearthobjects⚡#nasa⚡#galaxy⚡#stars⚡#astronomy⚡#universe⚡#cosmos⚡#space
👉subscribe Universe Mysteries
🌎 The freshwater African Nile crocodile holds a notorious reputation as one of Earth's most dangerous animals, responsible for hundreds of human fatalities yearly. Adult males can reach up to 5 meters in length and exert a bite force exceeding 16,000 newtons—one of the strongest in the animal kingdom. ✨
#crocodile⚡#danger⚡#predators
👉subscribe Interesting Planet
👉more Channels
🌎 Saltwater crocodiles are Earth's largest living reptiles and among the most dangerous animals, capable of ambushing and killing prey as large as water buffalo. Adult males can grow over 6 meters long and weigh up to 1,000 kilograms. ✨
#crocodile⚡#predators⚡#danger
👉subscribe Interesting Planet
🪐 On June 30, 1908, a small asteroid or comet exploded over Tunguska, Siberia, flattening 2,000 square kilometers of forest in an instant. Known as the Tunguska event, this airburst was caused by an object about 50–60 meters wide—large enough to release energy more powerful than the largest nuclear bomb ever detonated, yet leaving no impact crater. ✨
#asteroids⚡#danger⚡#Tunguska⚡#nasa⚡#galaxy⚡#stars⚡#astronomy⚡#universe⚡#cosmos⚡#space
👉subscribe Universe Mysteries
Why did yhe 2026 SuperbOwl logo colors match the Emergency Broadcast System colors??? What do they have planned or already know is coming??? #migrateEast#Danger#EmergencyBroadcastSystem#SuperBowl