首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Python的HDF5文件中删除子组

从Python的HDF5文件中删除子组
EN

Stack Overflow用户
提问于 2016-03-31 09:09:04
回答 1查看 2.9K关注 0票数 2

我正在尝试删除我在HDF5文件中使用h5py编写的一个子组。例如,根据文档,名为"MyDataset“的子组可以用以下方式删除:

代码语言:javascript
复制
del subgroup["MyDataset"] 

我这样做了,有效地,分组不再是可访问的。然而,这些文件并没有缩小其大小。我的问题是,是否可以使用h5py从已删除的子组中恢复空间,而不必将其余的子组重写为一个全新的文件?下面我举一个小例子来说明我所说的话:

代码语言:javascript
复制
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()

然后打开文件并删除前面的条目:

代码语言:javascript
复制
myfile = h5py.File('file1.hdf5')
del myfile["MyDataSet"]

如果您尝试使用以下方法获取数据:

代码语言:javascript
复制
myfile["MyDataSet"].value

您将意识到数据已不再可访问。但是,如果您检查文件的大小,它在调用del之前和之后都保持不变。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-31 09:43:40

del myfile["MyDataSet"]修改File对象,但不修改底层file1.hdf5文件。除非调用file1.hdf5文件,否则不会修改myfile.close()文件。

如果使用with-statement,则在Python离开with-statement时将自动为您调用with-statement

代码语言:javascript
复制
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))

版画

代码语言:javascript
复制
8002144         <-- original file size
2144            <-- new file size

注意,第一次打开写入模式的File ("w")创建一个新文件,第二次以附加模式("a",默认)打开File,允许读取并修改存在文件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36328931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档