Я использую библиотеку 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.