【发布时间】:2018-10-17 17:58:06
【问题描述】:
我想在 Python 中从 HDF5 数据集中删除一个元素。下面我有我的示例代码
删除HDF5Dataset.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 数据集,我想单独删除一个或多个元素,例如
删除HDF5DatasetElement.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
我能想到的最佳解决方案是创建一个临时数据集,循环遍历原始数据集,只将我想要保留的条目添加到临时数据集中,然后用新数据集替换旧数据集。但这似乎很笨拙。有没有人有一个干净的解决方案来做到这一点?似乎应该有一种简单的方法来删除一个元素。
谢谢,如果我的任何术语不正确,我们深表歉意。
【问题讨论】:
-
您的
mydataset数据集是什么样的?它是float数组还是其他? 一般来说,HDF5 并不是删除数据的最佳选择,因为默认情况下不会释放磁盘空间。 -
在我正在使用的当前案例中,这是一个元组
-
HDF5 文件没有
tuple的概念。 HDF5是C语言编写的跨平台数据格式,打印f['Log list'][3]看到什么? -
('string_example',)
-
是的,也许它不是一个元组,但它确实看起来像一个类似于元组的奇怪形式的数组