我想从Python中删除HDF5数据集中的元素。下面我有我的示例代码
DeleteHDF5Dataset.py
# This code works, which deletes an HDF5 dataset from an HDF5 file
file_name = os.path.join('myfilepath', 'myfilename.hdf5')
f = h5py.File(file_name, 'r+')
f.__delitem__('Log list')
然而,这不是我想要做的。 'mydatatset'是一个包含多个元素的HDF5数据集,我想单独删除一个或多个元素,例如
DeleteHDF5DatasetElement.py
# This code does not work, but I would like to achieve what it's trying to do
file_name = os.path.join('myfilepath', 'myfilename.hdf5')
f = h5py.File(file_name, 'r+')
print(f['Log list'][3]) # prints the correct dataset element
f.__delitem__('Log list')[3] # I want to delete element 3 of this HDF5 dataset
我能想出的最佳解决方案是创建一个临时数据集,遍历原始数据集,只将我想要保留的条目添加到临时数据集,然后用新数据集替换旧数据集。但这看起来很笨重。有没有人有一个干净的解决方案来做到这一点?似乎应该有一种简单的方法来删除一个元素。
谢谢,如果我的任何术语不正确,我很抱歉。
答案 0 :(得分:1)
看起来你有一个字符串数组。这不是HDF5中存储字符串的recommended way,但我们假设您无法选择如何存储数据。
HDF5 更喜欢以保持阵列大小不变。删除任意元素的操作很昂贵。此外,使用HDF5时,删除数据时不会自动释放空间。
毕竟,如果您仍想删除指定格式的数据,可以尝试简单地提取数组,删除元素,然后重新分配到数据集:
arr = f['Log list'][:] # extract to numpy array
res = np.delete(arr, 1) # delete element with index 1, i.e. second element
f.__delitem__('Log list') # delete existing dataset
f['Log list'] = res # reassign to dataset