Решили ли дизайнеры 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)


arrow_upward
1
arrow_downward

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

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

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

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