我正在尝试删除我在HDF5文件中使用h5py编写的一个子组。例如,根据文档,名为"MyDataset“的子组可以用以下方式删除:
del subgroup["MyDataset"] 我这样做了,有效地,分组不再是可访问的。然而,这些文件并没有缩小其大小。我的问题是,是否可以使用h5py从已删除的子组中恢复空间,而不必将其余的子组重写为一个全新的文件?下面我举一个小例子来说明我所说的话:
import numpy as np
import h5py
myfile = h5py.File('file1.hdf5')
data = np.random.rand(int(1e6))
myfile.create_dataset("MyDataSet", data=data)
myfile.close()然后打开文件并删除前面的条目:
myfile = h5py.File('file1.hdf5')
del myfile["MyDataSet"]如果您尝试使用以下方法获取数据:
myfile["MyDataSet"].value您将意识到数据已不再可访问。但是,如果您检查文件的大小,它在调用del之前和之后都保持不变。
发布于 2016-03-31 09:43:40
del myfile["MyDataSet"]修改File对象,但不修改底层file1.hdf5文件。除非调用file1.hdf5文件,否则不会修改myfile.close()文件。
如果使用with-statement,则在Python离开with-statement时将自动为您调用with-statement。
import numpy as np
import h5py
import os
path = 'file1.hdf5'
with h5py.File(path, "w") as myfile:
data = np.random.rand(int(1e6))
myfile.create_dataset("MyDataSet", data=data)
print(os.path.getsize(path))
with h5py.File(path, "a") as myfile:
del myfile["MyDataSet"]
try:
myfile["MyDataSet"].value
except KeyError as err:
# print(err)
pass
print(os.path.getsize(path))版画
8002144 <-- original file size
2144 <-- new file size注意,第一次打开写入模式的File ("w")创建一个新文件,第二次以附加模式("a",默认)打开File,允许读取并修改存在文件。
https://stackoverflow.com/questions/36328931
复制相似问题