Можно ли в 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
🌎 Layers of ancient lake and ocean sediments serve as natural records of Earth's climate. By studying pollen, ash, and chemical changes in these sediments, scientists can reconstruct temperature, rainfall, and ecosystem shifts from thousands to millions of years ago. Some Greenland and Antarctic cores show detailed yearly changes stretching back over 100,000 years. ✨
#geology⚡#climate⚡#paleoclimate
👉subscribe Interesting Planet
👉more Channels
🌍 The Sahara was once a lush region covered with lakes and grasslands about 10,000 years ago. Ancient rock art and fossils show hippos and crocodiles lived where desert sands now stretch for miles. ✨
#historicalgeography⚡#paleoclimate⚡#sahara⚡#geography⚡#nature⚡#earth
👉subscribe Amazing Geography🌍
🌎 Layers of ancient coral reefs act as natural records of Earth’s climate history. By analyzing their growth bands, scientists uncover patterns of sea temperature and ocean chemistry stretching back millions of years. ✨
#coral⚡#geology⚡#paleoclimate
👉subscribe Interesting Planet
🌎 Ancient lake beds called "playa lakes" preserve natural records of Earth's past. Layers of sediment in these basins capture pollen, plant remains, and even insect fossils, revealing climate cycles and environmental shifts over thousands of years. Some dry lakebeds in the U.S. Southwest show records going back 120,000 years. ✨
#geology⚡#paleoclimate⚡#lakes
👉subscribe Interesting Planet
👉more Channels
🌎 Mud layers at the bottom of lakes and oceans provide detailed natural records of Earth's past climates. These sediments contain pollen, fossils, and chemical traces, letting scientists reconstruct environmental changes over hundreds of thousands of years. ✨
#paleoclimate⚡#sediments⚡#geology
👉subscribe Interesting Planet
🌎 Beneath the waters of the Bahamas, the so-called “blue holes” are deep, vertical underwater caves formed during past ice ages when sea levels were lower. Some exceed 300 meters in depth and preserve ancient fossils and climate records in their oxygen-poor layers. ✨
#ocean⚡#cave⚡#paleoclimate
👉subscribe Interesting Planet
👉more Channels
🌎 Around 252 million years ago, the Permian-Triassic extinction wiped out about 90% of marine species and 70% of land vertebrates. Massive volcanic eruptions in Siberia released greenhouse gases that drove rapid global warming, ocean acidification, and low oxygen levels—making it the largest extinction event in Earth's history. ✨
#extinction⚡#volcanoes⚡#paleoclimate
👉subscribe Interesting Planet
👉more Channels
🌎 Antarctic ice cores act as natural records of Earth's atmosphere, trapping ancient air bubbles that show CO2, methane, and temperature changes going back 800,000 years. ✨
#icecores⚡#paleoclimate⚡#antarctica
👉subscribe Interesting Planet
👉more Channels
🌎 Antarctica’s ancient ice sheets hold Earth’s longest direct climate records. Deep ice cores reveal trapped air bubbles, preserving atmospheric changes over 800,000 years. This helps scientists track greenhouse gas levels and temperature shifts across multiple ice ages. ✨
#Antarctica⚡#icecores⚡#paleoclimate
👉subscribe Interesting Planet
👉more Channels
🌎 Ice cores drilled from Antarctica and Greenland are frozen time capsules, preserving thousands of years of air bubbles, pollen, and tiny particles. By analyzing these layers, scientists reconstruct past temperatures, volcanic eruptions, and atmospheric changes stretching back over 800,000 years. ✨
#icecores⚡#paleoclimate⚡#atmosphere
👉subscribe Interesting Planet
👉more Channels
Sea Secrets - Arash Sharifi
Arash Sharifi, a Ph.D. candidate of marine geology and geophysics at the UM Rosenstiel School, takes us into the compelling world of #paleoclimate research. By using climate, #historical, and #archeological records, Sharifi shows how climate change has been affecting the world since the beginning of human #civilization.
@Enviro_Climate
https://youtu.be/ovy-57jx85Q?t=3
🌎 Coral reefs provide another remarkable natural record of Earth’s past. As corals grow, they form bands in their skeletons that reflect seasonal changes in water temperature, chemistry, and even extreme weather events. Some coral cores reveal ocean conditions dating back several centuries. ✨
#coral⚡#reefs⚡#paleoclimate⚡#oceanography
👉subscribe Interesting Planet
👉more Channels