Проблема записи атрибутов в структуру VD с использованием PyHDF - PullRequest
0 голосов
/ 20 марта 2019

Я использую библиотеку PyHDF в Python 3.6.2, чтобы попытаться записать файл HDF4, чтобы он соответствовал некоторому традиционному форматированию.Мне приходится копировать это со своего компьютера разработчика вручную, поэтому, пожалуйста, простите за любые опечатки.

У меня проблема с записью нескольких типов атрибутов в одну структуру VD.Соответствующий код ниже

from pyhdf.HDF import *
from pyhdf.VS import *
import numpy as np

# do a bunch of stuff to get the `data` and `fields` arrays
data_array = np.array(data, dtype=np.float64)
f = HDF("out.hdf4", HC.WRITE | HC.CREATE)
vs = f.vstart()
vsheader = []
for i in range(len(fields)):
    vsheader.append((fields[i][0], HC.FLOAT64, 1))

vd = vs.create('', vsheader)
vd.write(data_array.toList())

#attribute writing section (problem seems to be in this section)
a1 = vd.attr('attributes')
a1.set(HC.FLOAT64, (1.0,2.0,3.0,4.0))

a2 = vd.attr('attribute2')
a2.set(HC.FLOAT64, (5.0,6.0,7.0))

a3 = vd.attr('attribute3')
a3.set(HC.FLOAT64, (8.0,9.0, 9999.0)

h1 = vd.attr('Header_Text1')
h1.set(HC.CHAR8, "version 1.0")

h2 = vd.attr('Header_Text2')
h2.set(HC.CHAR8, "19Mar2019")

#detach and close
vd.detach()
vs.end()
f.close()

В моем файле HDF4 все данные сохраняются, как и ожидалось, и первые три атрибута также.Однако «Header_Text1» и «Header_Text2» отсутствуют в готовом файле.Если я делаю vd.attrinfo() после добавления, но перед отсоединением они присутствуют.Если я поменяю порядок и поставлю заголовки перед атрибутами, это сохранит h1, h2 и a1.Если у меня есть только a1 и h1, он будет сохранять только то, что будет первым.

Я предполагаю, что я делаю что-то не так, но я не могу понять, что.

edit: после небольшого возни, кажется, что правильно сохраняется первая половина всех добавленных атрибутов, округленная в большую сторону, так что total = 2 => сохранено = 1, всего = 5 => сохранено = 3, всего = 13 => сохранено =7.

...