Форум сайта python.su
есть бинарный файл,состоящий из 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 =
Офлайн
Кстати, посмотрите на библиотеку construct
Офлайн
Андрей Светловк сожалению мне надо считывать точно 67 байтов,как там дальше идет приведение,меня не волнует.
По умолчанию идет native format ‘@’. Ваши поля структуры выравниваются так, как принято в используемой архитектуре. На x64 у меня получается 70 байт.
header_fmt=“=HHfHIIHHI8s31sH” делает то, что вам нужно.
Структуры в список придется читать вручную.
Например, через struct.unpack_from
lst =
Офлайн
PooHБольшое спасибо! Похоже то,что надо…..
Кстати, посмотрите на библиотеку construct
Офлайн
Vitto, читать умеете? Поставьте = перед спецификацией формата.
Офлайн
VittoПочему только для 2.4? Вот http://pypi.python.org/pypi/construct/2.00 В принципе все что можно сделать с ней, можно и через struct сделать, просто с ней удобней.
Есть только одно НО…библиотека для Питона 2.4,а как её “прикрутить” к 2.6.4?
VittoНа всякий случай - про SciPy знаете?
Я в Питоне ещё только “пользователь”, вынужден переходить на него с матлаба - универ не хочет покупать матлаб…:(((
Офлайн
PooHБольшое спасибо за ссылку!VittoПочему только для 2.4? Вот http://pypi.python.org/pypi/construct/2.00 В принципе все что можно сделать с ней, можно и через struct сделать, просто с ней удобней.
Есть только одно НО…библиотека для Питона 2.4,а как её “прикрутить” к 2.6.4?VittoНа всякий случай - про SciPy знаете?
Я в Питоне ещё только “пользователь”, вынужден переходить на него с матлаба - универ не хочет покупать матлаб…:(((
Офлайн
pythonxy() - это дистрибутив включающий кучу научных библиотек, в том числе SciPy
Офлайн
VittoМожет я чего-то недопонял, но ведь нечитаемо. Не лучше ли структуру сделать как наследника Structure из ctypes? Там и полезный параметр _pack_ есть.
header_fmt=“HHfHIIHHI8s31sH”
Офлайн