Я запускаю код, который принимает файлы .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)), за исключением того, что в моем случае причина невозможности открыть файл другая. Насколько я понимаю (не уверен, правильно ли), файлы слишком большие и, следовательно, усечены. Если это так, то какое решение для этого? А если я ошибаюсь, то в чем проблема? Ваша помощь очень ценится.