【发布时间】:2014-12-24 04:00:15
【问题描述】:
我在 Ubuntu 12.04(32 位版本)下创建了一个 HDF5 文件,显然没有任何问题,使用 Anaconda 作为 Python 发行版并在 ipython 笔记本中编写。底层数据都是 numpy 数组。例如,
import numpy as np
import h5py
f = h5py.File('myfile.hdf5','w')
group = f.create_group('a_group')
group.create_dataset(name='matrix', data=np.zeros((10, 10)), chunks=True, compression='gzip')
如果我尝试从新的 iython 笔记本打开此文件,我会收到一条错误消息:
f = h5py.File('myfile.hdf5', "r")
---------------------------------------------------------------------------
IOError Traceback (most recent call last)
<ipython-input-4-b64ac5089cd4> in <module>()
----> 1 f = h5py.File(file_name, "r")
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/files.pyc in __init__(self, name, mode, driver, libver, userblock_size, **kwds)
220
221 fapl = make_fapl(driver, libver, **kwds)
--> 222 fid = make_fid(name, mode, userblock_size, fapl)
223
224 Group.__init__(self, fid)
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/files.pyc in make_fid(name, mode, userblock_size, fapl, fcpl)
77
78 if mode == 'r':
---> 79 fid = h5f.open(name, h5f.ACC_RDONLY, fapl=fapl)
80 elif mode == 'r+':
81 fid = h5f.open(name, h5f.ACC_RDWR, fapl=fapl)
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/h5f.so in h5py.h5f.open (h5py/h5f.c:1741)()
IOError: Unable to open file (Unable to find a valid file signature)
你能告诉我丢失的文件签名是什么吗?我创建文件时是否遗漏了什么?
【问题讨论】:
-
您在尝试再次打开之前是否
f.close()您的可写 文件?此外,您的示例代码不可执行:变量Mfrgroup、fgroup_ID、pos、Msgroup、sgroup_ID和names未定义。 -
在写入或写入文件时(使用任何文件构造函数,而不仅仅是 h5py)通常建议使用
withstatement。例如with h5py.File('myfile.hdf5', 'w') as f:。这样您就不必显式关闭文件。另一方面,它使得交互式调试文件 I/O 变得困难。 -
另外,您真的需要在数据集中创建所有这些变量来生成此错误吗?如果您只创建其中一个变量,您会得到同样的错误吗?
-
你是对的,我确实忘记
f.close()文件!我通常使用with语句,但这次遵循了一个教程,当然忘记了......你想为此写一个答案,还是我应该?还是有其他方法可以将此问题标记为已解决? -
太棒了!我对 iPython 笔记本了解不多,但基于此错误,我猜测它们使用相同的解释器(内核/会话)。 This page 讨论了将内核与笔记本分开,这可能适合您的问题;即,也许您在此更改之前正在使用 iPy 笔记本?这些类型的事情可以记录在您提供的答案中。