Удалить или обновить набор данных в HDF5?

Я хотел бы программно изменить данные, связанные с набором данных в файле HDF5. Кажется, я не могу найти способ удалить набор данных по имени (что позволяет мне снова добавить его с измененными данными) или обновить набор данных по имени. Я использую C API для HDF5 1.6.x, но были бы полезны указатели на любой HDF5 API.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
7 838
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Согласно руководству пользователя:

HDF5 does not at this time provide an easy mechanism to remove a dataset from a file or to reclaim the storage space occupied by a deleted object.

О таком простом удалении не может быть и речи. Но раздел продолжается:

Removing a dataset and reclaiming the space it used can be done with the H5Ldelete function and the h5repack utility program. With the H5Ldelete function, links to a dataset can be removed from the file structure. After all the links have been removed, the dataset becomes inaccessible to any application and is effectively removed from the file. The way to recover the space occupied by an unlinked dataset is to write all of the objects of the file into a new file. Any unlinked object is inaccessible to the application and will not be included in the new file. Writing objects to a new file can be done with a custom program or with the h5repack utility program.

Спасибо. Есть идеи, как PyTables (движок Python, созданный поверх HDF5) справляется с этим?

Barry Wark 17.01.2009 01:01

Документация по «изменению» таблицы в PyTables находится в pytables.org/moin/HintsForSQLUsers#Alteringatable, но обратите внимание: «(добавление столбца) в настоящее время не поддерживается в PyTables».

Max Lybbert 21.01.2009 00:45

Странно получать анонимный отрицательный голос через пять лет после ответа на вопрос, тем более что мой ответ ссылается на соответствующую документацию, в которой четко указано, что это было невозможно в 2009 году. Была ли добавлена ​​эта возможность?

Max Lybbert 23.04.2014 00:10

@MaxLybbert, пожалуйста, подскажите еще один способ удалить все значения из набора данных и изменить размер набора данных в соответствии с новыми значениями.

Mohini Mhetre 15.10.2014 09:41

@MohiniMhetre: Я искал в HDF5 кое-что, над чем я баловался пять лет назад, но я никогда не относился серьезно к этому проекту. Я, конечно, не эксперт по HDF5. Насколько я помню, есть возможность удалять / обновлять данные; но файл не уменьшится в размере, даже если вы удалите значения. Кажется, что более распространено просто воссоздать файл с нуля, используя обновленные данные.

Max Lybbert 16.10.2014 18:06
Обновлять: Я не знаю, насколько вы можете полагаться на это, но по моему опыту использования последней библиотеки HDF5 (1.8.10) я обнаружил, что файл делает сжимается после того, как я использую H5Ldelete. Я не знаю, намеренно это или случайно.
Owen 04.11.2018 22:37

Если вы хотите удалить набор данных в C++, вам понадобятся следующие команды:

H5File m_h5File (pathAndNameToHDF5File, H5F_ACC_RDWR); //The hdf5 c++ object.
std::string channelName = "/myGroup/myDataset";
int result = H5Ldelete(m_h5File.getId(), channelName.data(), H5P_DEFAULT);

В случае успеха результат будет неотрицательным значением; в противном случае возвращает отрицательное значение. https://support.hdfgroup.org/HDF5/doc/RM/RM_H5L.html#Link-Delete

Как сказал @MaxLybbert, пространство на жестком диске не восстанавливается. Вы должны использовать инструмент переупаковки. Однако с HDF5 v.1.10 это пространство можно восстановить. Но руководство пользователя еще не готово: https://support.hdfgroup.org/HDF5/docNewFeatures/NewFeaturesFileSpaceMgmtDocs.html

Другие вопросы по теме