Восстановить поврежденный файл hdf5

#hdf5

#hdf5

Вопрос:

Мы сохраняем масс-спектры времени полета в файлах hdf5. Более чем в 99% случаев это работает без каких-либо ошибок. Но иногда измерения выходят из строя.

Мы сохраняем разные (мета-) данные, но мой вопрос касается одной увеличивающейся таблицы:

  • Расположение хранилища: ФРАГМЕНТИРОВАННЫЙ: 1x1x10x248584
  • Сжатие: 8,312: 1GZIP: уровень = 5

Значения вставляются с каждым временным шагом (обычно 10 секунд). Через 1 минуту макет составляет 6x1x10x248584.

Но поврежденная таблица имеет размер: 0x1x10x248584 (пробовал с h5py 2.10.0 и HDFView 3.1.0).

Мой вопрос: есть ли какая-либо низкоуровневая библиотека (предпочтительно python), где я могу попытаться получить доступ к потерянным данным? Размер файла (размером в несколько часов -> несколько ГБ) обещает, что данные есть, но они не могут быть прочитаны с помощью тех двух программ, которые я пробовал. Спасибо.

[Обновление]: в HDFView это выглядит так для поврежденного файла. Исходя из размера файла, я ожидаю, что первое измерение будет> 1000. введите описание изображения здесь

Комментарии:

1. Для открытия файлов можно использовать библиотеку h5py. Вы можете использовать утверждение для формы в качестве базовой проверки без чтения данных. Вопрос к вам: как данные были повреждены. У меня была такая же проблема раньше, когда я использовал C API. Поскольку я переключаюсь на C API (с другой оболочкой C ) Я ни разу не сталкивался с проблемой повреждения.

2. This (f[‘path_to_array’].shape) возвращает те же значения (0x1x10x248584). Изменения на стороне создания данных для нас невозможны (на данный момент), потому что это программное обеспечение с закрытым исходным кодом 🙁

3. Если я открою с помощью чтения / записи h5py. Файл (‘name.h5’, ‘r ‘) размер файла уменьшается до ~ 1 МБ (до 2 ГБ), что означает, что h5py сохраняет только те данные, которые он нашел, прочитав их.

4. Я полагаю, что вы перебираете все наборы данных и пытаетесь прочитать, а в противном случае пропустить?

5. Нет, я знаю, какой набор данных мне нужен, и могу обратиться к нему напрямую (h5py. File(‘fname.h5’)[‘FullSpectra/TofData’]).