Решили ли дизайнеры hdf5 проблему повреждения, связанную с открытием файлов .hdf5?

Я запускаю код, который принимает файлы .hdf5 в качестве входных данных (созданных в результате моделирования), а затем анализирует их и выдает некоторую статистику и строит график с помощью командной строки: python3 Collector.py в оболочке Konsole Fedora 21 Linux. У меня много .py процедур в двух разных папках с именами gizmo и utilities в рабочем каталоге. Файлы snapshot_index.hdf5 передаются отдельно (с помощью программного обеспечения globus) с другого компьютера, на котором выполняется моделирование, в локальный каталог с именем output внутри рабочего каталога на моем ноутбуке. (Есть много файлов, соответствующих «индексу» от 0 до 600, но мне нужно только два таких индекса, например, snapshot_396.hdf5 и snapshot_600.hdf5). Моделирование выполняется в двух разных режимах: с низким и высоким разрешением.

Когда файлы .hdf5 низкого разрешения размером в килобайт являются входными данными выражения part (внутри основного кода Python, упомянутого выше), я могу запустить код и получить результаты, но когда я устанавливаю высокое разрешение мегабайтного размера. hdf5 в качестве входных данных выражения part, я получаю следующее сообщение об ошибке:

# in utilities.simulation.Snapshot():
  read snapshot_times.txt
  reading snapshot index = 600, redshift = 0.000


# in gizmo.gizmo_io.Read():
  reading header from: ./output/snapshot_600.hdf5

Traceback (most recent call last):
  File "Collector.py", line 12, in <module>
    part=gizmo.io.Read.read_snapshots('all', 'index', 600, element_indices=None)
  File "/home/username/Desktop/Projects/PaperMaterials/DM_Dominated_Objects/NewFolder2/covering_fractions/Simulations/gizmo/gizmo_io.py", line 314, in read_snapshots
    'index', snapshot_index, simulation_directory, snapshot_directory, simulation_name)
  File "/home/username/Desktop/Projects/PaperMaterials/DM_Dominated_Objects/NewFolder2/covering_fractions/Simulations/gizmo/gizmo_io.py", line 513, in read_header
    file_in = h5py.File(file_name, 'r')  # open hdf5 snapshot file
  File "/usr/lib/python3.4/site-packages/h5py/_hl/files.py", line 222, in __init__
    fid = make_fid(name, mode, userblock_size, fapl)
  File "/usr/lib/python3.4/site-packages/h5py/_hl/files.py", line 79, in make_fid
    fid = h5f.open(name, h5f.ACC_RDONLY, fapl=fapl)
  File "h5f.pyx", line 71, in h5py.h5f.open (h5py/h5f.c:1809)
OSError: Unable to open file (Truncated file: eof = 933756928, sblock->base_addr = 0, stored_eoa = 1765865624)

Я не понимаю смысла ошибки. Но когда я провел поиск по этой теме, я заметил, что это не новая проблема, касающаяся файлов .hdf5 (Поврежденные файлы при создании файлов HDF5 без их закрытия (h5py)), за исключением того, что в моем случае причина невозможности открыть файл другая. Насколько я понимаю (не уверен, правильно ли), файлы слишком большие и, следовательно, усечены. Если это так, то какое решение для этого? А если я ошибаюсь, то в чем проблема? Ваша помощь очень ценится.


person Ash    schedule 21.10.2016    source источник


Ответы (1)


Похоже, ваш входной файл поврежден. Что произойдет, если вы запустите утилиты командной строки h5dump, h5stat или h5ls для входного файла?

Я не думаю, что ваша проблема имеет какое-либо отношение к разработчикам HDF5 или другому вопросу, который вы связали (который касался программы, которая вылетела при записи файла HDF5). Скорее всего, в вашей программе написания есть ошибка. Вы можете проверить это, посмотрев, работают ли другие действующие программы HDF5 с вашими файлами.

Размер вашего файла составляет менее 1 ГБ, что не так уж и много для HDF5.

person John Zwinck    schedule 22.10.2016
comment
Все три кода, примененные к файлам, дают ошибку: невозможно открыть файл snapshot_index.hdf5 Итак, вы правы; файлы повреждены. Я только что перенес их с суперкомпьютера национальной лаборатории. Вот почему я сомневался, что они разбились. - person Ash; 22.10.2016