Как скопировать частичный или скелетный файл h5py - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть несколько вопросов в этом выпуске.Я понимаю, что это может быть запутанный пост и может предоставить дополнительную информацию.

Пакет кода, который я использую, может создавать большие файлы .h5 (source.h5) (100+ Гб), где почти все эти данные находятся в одном наборе данных (group2 / D).Я хочу создать новый файл .h5 (dest.h5), используя Python, который содержит все наборы данных, кроме group2 / D в source.h5, без необходимости копировать весь файл.Затем я сконцентрирую group2 / D после некоторой постобработки и напишу новую group2 / D в dest.h5 с гораздо меньшим количеством данных.Однако мне нужно сохранить source.h5, потому что эта постобработка может потребоваться выполнить несколько раз в нескольких файлах назначения.

source.h5 всегда имеет одинаковую структуру и не может быть изменен ни в source.h5, ни в dest.h5, где каждая буква является набором данных:

group1/A
group1/B
group2/C
group2/D

Поэтому я хочу сначала создатьфайл с этим форматом:

group1/A
group1/B
group2/C

и снова заполните group2 / D позже.Всегда возможно простое копирование source.h5 несколько раз, но я бы хотел избежать многократного копирования огромного файла, потому что дисковое пространство ограничено, и это не случай.

Я искал и нашел этот вопрос ( Как частично скопировать с помощью python файл Hdf5 в новый файл с той же структурой? ) и проверить, будет ли dest.h5 таким же, как и исходный код.h5:

fs = h5py.File('source.h5', 'r')
fd = h5py.File('dest.h5', 'w')
fs.copy('group1', fd)
fd.create_group('group2')
fs.copy('group2/C', fd['/group2'])
fd.copy('group2/D', fd['/group2'])
fs.close()
fd.close()

, но пакет кода, который я использовал, не смог прочитать созданный мной файл (что, должно быть, и произошло), подразумевая, что при выполнении этой операции произошла некоторая критическая потеря данных (размеры файлов)также отличаются на 7 кб).Я предполагаю, что проблема была в том, когда я создал группу 2 вручную, потому что я проверил с помощью numpy, что значения в наборах данных группы 1 точно совпадают как в source.h5, так и в dest.h5.Прежде чем приступить к поиску пропущенных данных, я хотел кое-что уяснить:

Вопрос 1: Существуют ли метаданные файла .h5, которые сопровождают каждую группу или набор данных?Если это так, как я могу это увидеть, чтобы я мог создать группу group2 в dest.h5, которая точно соответствует группе в source.h5?Есть ли способ узнать, точно ли совпадают 2 группы (не наборы данных)?

Вопрос 2: В качестве альтернативы, можно ли просто скопировать структуру данных файла .h5 (то есть групп и наборов данных с пустыми списками в виде файла скелета), чтобы можно было заполнять поляпотом?Или, как подмножество этого вопроса, есть ли способ скопировать пустой набор данных в другой файл, чтобы сохранить какие-либо метаданные (при условии, что они есть)?

Вопрос 3: Наконец, чтобы избежать всего этого, возможно ли просто скопировать подмножество source.h5 в dest.h5?С чем-то вроде:

fs.copy(['group1','group2/C'], fd)

Спасибо за ваше время.Я ценю, что вы читаете это далеко

...