Найти - Пользователи
Полная версия: чтение структур из бинарного файла
Начало » Python для новичков » чтение структур из бинарного файла
1 2
Vitto
есть бинарный файл,состоящий из 2-х частей - метаданные и массив данных от АЦП.Метаданные - набор структур(известных),количество которых самоопределяется.Первая структура может быть описана так: header_fmt=“HHfHIIHHI8s31sH”.Если подсчитать “вручную”,то размер 67 байт(так и должно быть).Однако struct.calcsize(header_fmt) дает размер в 68 байт(?).Хуже того,при считывании первые 3 значения правильные,а дальше белиберда.Если проверить с помощью Hex-редактора,то получается,что для ‘f’ считывается 8 байт,хотя struct.calcsize('f') дает 4.(?) Как это побороть?
Последнее число в header_fmt определяет число следующих структур.Как считать эти структуры в массив(список)?
Python 2.6.4 Windows XP sp3 NetBeans 6.8(проверял и в PyScripter).
Андрей Светлов
По умолчанию идет native format ‘@’. Ваши поля структуры выравниваются так, как принято в используемой архитектуре. На x64 у меня получается 70 байт.
header_fmt=“=HHfHIIHHI8s31sH” делает то, что вам нужно.
Структуры в список придется читать вручную.
Например, через struct.unpack_from
lst =
PooH
Кстати, посмотрите на библиотеку construct
Vitto
Андрей Светлов
По умолчанию идет native format ‘@’. Ваши поля структуры выравниваются так, как принято в используемой архитектуре. На x64 у меня получается 70 байт.
header_fmt=“=HHfHIIHHI8s31sH” делает то, что вам нужно.
Структуры в список придется читать вручную.
Например, через struct.unpack_from
lst =
к сожалению мне надо считывать точно 67 байтов,как там дальше идет приведение,меня не волнует.
Вы упомянули про native format- можно ли им “поиграть”,чтобы получить то,что мне нужно?
Большое спасибо,что откликнулись! Тяжело переходить с Матлаба на Питон:(((
Vitto
PooH
Кстати, посмотрите на библиотеку construct
Большое спасибо! Похоже то,что надо…..
Есть только одно НО…библиотека для Питона 2.4,а как её “прикрутить” к 2.6.4?
Я в Питоне ещё только “пользователь”, вынужден переходить на него с матлаба - универ не хочет покупать матлаб…:(((
Андрей Светлов
Vitto, читать умеете? Поставьте = перед спецификацией формата.
PooH
Vitto
Есть только одно НО…библиотека для Питона 2.4,а как её “прикрутить” к 2.6.4?
Почему только для 2.4? Вот http://pypi.python.org/pypi/construct/2.00 В принципе все что можно сделать с ней, можно и через struct сделать, просто с ней удобней.
Vitto
Я в Питоне ещё только “пользователь”, вынужден переходить на него с матлаба - универ не хочет покупать матлаб…:(((
На всякий случай - про SciPy знаете?
Vitto
PooH
Vitto
Есть только одно НО…библиотека для Питона 2.4,а как её “прикрутить” к 2.6.4?
Почему только для 2.4? Вот http://pypi.python.org/pypi/construct/2.00 В принципе все что можно сделать с ней, можно и через struct сделать, просто с ней удобней.
Vitto
Я в Питоне ещё только “пользователь”, вынужден переходить на него с матлаба - универ не хочет покупать матлаб…:(((
На всякий случай - про SciPy знаете?
Большое спасибо за ссылку!
Про sciPy cлышал и смотрел…Собственно,пока я приглядываюсь к свободному ПО для научных исследований.Больше всего мне понравилось pythonxy(), но система очень большая и пока для меня сложная. Надо изучать питон,что и начал делать с получения данных для обработки. К сожалению данные “чужие”,формируются прогой,написанной на си,“винегрет” структур и бинарных данных(массивов выборок).
В матлабе можно описать структуру(при этом типы данных достаточно разнообразны),считать её целиком(даже,если это массив структур) в соответствующую переменную.Как это сделать в питоне,не понимаю.Например,можно ли сделать что-то подобное: Z= a,d,c=struct.unpack(fmt,f.read(..))? Или лучше определить класс без методов? Мне б хотелось обращаться к полям как Z.a…?
Zubchick
pythonxy() - это дистрибутив включающий кучу научных библиотек, в том числе SciPy
Kogrom
Vitto
header_fmt=“HHfHIIHHI8s31sH”
Может я чего-то недопонял, но ведь нечитаемо. Не лучше ли структуру сделать как наследника Structure из ctypes? Там и полезный параметр _pack_ есть.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB