从 Python 中的 HDF5 文件中删除子组
Delete subgroup from HDF5 file in Python
我正在尝试删除我在 Python 中使用 h5py 在 HDF5 文件中写入的子组。例如,根据文档,可以删除名为 "MyDataset" 的子组:
del subgroup["MyDataset"]
我做到了,实际上该子组不再可访问。但是,文件不会减小其大小。我的问题是,是否可以使用 h5py 从已删除的子组中恢复 space 而不必将剩余的子组重写到一个全新的文件中?下面我提供一个小例子来说明我在说什么:
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 之前和之后保持不变。
del myfile["MyDataSet"]
修改 File
对象,但不修改基础 file1.hdf5
文件。在调用 myfile.close()
之前,file1.hdf5
文件不会被修改。
如果您使用 with-statement
,myfile.close()
将在 Python 离开 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"
) 会创建一个新文件,第二次以追加模式打开 File
("a"
,默认)允许读取现有文件并修改它。
我正在尝试删除我在 Python 中使用 h5py 在 HDF5 文件中写入的子组。例如,根据文档,可以删除名为 "MyDataset" 的子组:
del subgroup["MyDataset"]
我做到了,实际上该子组不再可访问。但是,文件不会减小其大小。我的问题是,是否可以使用 h5py 从已删除的子组中恢复 space 而不必将剩余的子组重写到一个全新的文件中?下面我提供一个小例子来说明我在说什么:
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 之前和之后保持不变。
del myfile["MyDataSet"]
修改 File
对象,但不修改基础 file1.hdf5
文件。在调用 myfile.close()
之前,file1.hdf5
文件不会被修改。
如果您使用 with-statement
,myfile.close()
将在 Python 离开 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"
) 会创建一个新文件,第二次以追加模式打开 File
("a"
,默认)允许读取现有文件并修改它。