2014-10-23 2 views
1

У меня есть файл hdf5, который я хочу изменить, удалив атрибут одного из наборов данных и сохраните файл без дальнейших изменений. Я могу сделать это в hdfview, но мне нужно что-то написанное, потому что оно должно применяться к большому количеству файлов.Удалить атрибут набора данных из файла HDF5

Я пытался писать сценарий в Python, используя h5py:

import h5py 
inF = h5py.File("Filename.h5", 'r') 
dSet = inF['/data/myDataset'] 
del dSet.attrs['myAttrName'] 

Но я получаю следующее сообщение об ошибке:

Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.7/dist-packages/h5py/_hl/attrs.py", line 75, in delitem h5a.delete(self._id, self._e(name)) File "h5a.pyx", line 135, in h5py.h5a.delete (h5py/h5a.c:2682) KeyError: "unable to delete attribute (Attribute: Can't delete message)"

print dSet.attrs['myAttrName'] производит правильное значение, доказав я могу получить доступ к атрибуту.

Есть ли другие способы сделать это? Возможно, используя h5ppack?

ответ

1

Я закончил с использованием одного из HDF инструментов - h5copy:

h5copy -p -i inputFile.h5 -o outputFile.h5 -s /inputDataSetName -d /outputDataSetName -f noattr 

Поскольку все файлы, которые я должен обработать те же наборы данных, и это довольно небольшое количество набора данных, с я написал скрипт который вызывает h5copy для каждого.

Обратите внимание, что запуск h5copy в группе не приведет к удалению атрибутов всех наборов данных в этой группе.

2

Проблема с сценарием h5py заключается в том, что вы открыли файл в режиме только для чтения («r»). Вам необходимо открыть с добавлением, например:

inF = h5py.File("Filename.h5", 'a') 
Смежные вопросы