python - 以 h5py 对象作为实例变量的令人费解的赋值行为

标签 python h5py

我正在使用 h5py 访问 HDF5 文件并将 h5py File 对象存储在一个类中。但是我在尝试用一个新的重新分配一个关闭的 h5py 文件实例变量时遇到了一些奇怪的行为:

class MyClass:
    def __init__(self, filename):
        self.h5file = None
        self.filename = filename

    def vartest(self):
        self.h5file = h5py.File(self.filename, 'r')
        print self.h5file
        self.h5file.close()
        print self.h5file
        newh5file = h5py.File(self.filename, 'r')
        print newh5file
        self.h5file = newh5file
        print self.h5file
        print newh5file

def main():
    filename = sys.argv[1]
    mycls = MyClass(filename)
    mycls.vartest()

输出:

<HDF5 file "test.h5" (mode r, 92.7M)>
<Closed HDF5 file>
<HDF5 file "test.h5" (mode r, 92.7M)>
<Closed HDF5 file>
<Closed HDF5 file>

尝试用新打开的 h5py File 对象更新实例变量似乎以某种方式影响了对象的状态,将其关闭。无论 h5py 端的实现如何,根据我对 Python 语言的理解,我看不出这种行为有何意义(即,没有重载赋值运算符)。

此示例使用 Python 2.6.5 和 h5py 1.3.0 运行。如果您想尝试这个示例但没有 HDF5 文件,您可以将文件访问模式从“r”更改为“a”。

最佳答案

是的,这是 h5py 1.3 中的一个已知错误,当​​您使用 HDF5 1.8.5 或更新版本时会出现该错误。它与 1.8.5 中标识符处理方式的变化有关。您可以使用 HDF5 1.8.4 或更早版本或升级到 h5py 2.0 来修复它。

关于python - 以 h5py 对象作为实例变量的令人费解的赋值行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7355545/

相关文章:

python - scikit-learn roc_auc_score() 返回精度值

python - 使用 h5py 合并所有 h5 文件

python - 根据时间增量和索引修改列值

python - Pyspark 数据框收集热门记录

python - 调整大小时如何压缩hdf5文件?

python - 资源耗尽错误: OOM when allocating tensor

python - 插入许多 HDF5 数据集非常慢

python - 使用 h5py 以写入模式打开已打开的 hdf5 文件

Python 解析带有 HTML 内容的 XML 文件

python - lxml/MathML XML 架构 - 如何修复 "content model is not determinist."错误?