2014-10-28 17 views
7

Ho creato un file HDF5 apparentemente senza problemi, in Ubuntu 12.04 (versione a 32 bit), utilizzando Anaconda come distribuzione e scrittura Python nei notebook ipython. I dati sottostanti sono tutti gli array numpy. Ad esempio,Il file HDF5 creato con h5py non può essere aperto da h5py

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') 

Se provo ad aprire il file da un nuovo notebook iypthon, però, ricevo un messaggio di errore:

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) 

mi puoi dire quello che la firma file mancante è? Mi sono perso qualcosa quando ho creato il file?

+3

Forse si '' f.close tuo file *() * scrivibile prima di provare per aprirlo di nuovo? Inoltre, il tuo codice di esempio non è eseguibile: le variabili 'Mfrgroup',' fgroup_ID', 'pos',' Msgroup' 'sgroup_ID' e' nomi' non sono definiti. – farenorth

+1

Si consiglia di scrivere o da file (usando qualsiasi costruttore di file, non solo h5py) per usare l'istruzione ['with'] (http://stackoverflow.com/questions/3012488/what-is-the-python -con-dichiarazione-progettato per). Per esempio 'con h5py.File ('myfile.hdf5', 'w') come f:'. Ciò lo rende cosicché tu non debba chiudere esplicitamente il file. D'altra parte, rende difficile eseguire il debug del file I/O in modo interattivo. – farenorth

+1

Inoltre, è necessario creare tutte queste variabili nel set di dati per generare questo errore? Hai lo stesso errore se crei solo una di quelle variabili? – farenorth

risposta

15

Da quando abbiamo risolto il problema nei commenti sulla mia domanda, sto scrivendo i risultati qui per contrassegnarlo come risolto.

Il problema principale era che mi sono dimenticato di chiudere il file dopo averlo creato. Non ci sarebbe stato due semplici opzioni, sia:

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') 
f.close() 

o, il mio preferito perché il file è chiuso automaticamente:

import numpy as np 
import h5py 

with h5py.File('myfile.hdf5','w') as f: 
    group = f.create_group('a_group') 
    group.create_dataset(name='matrix', data=np.zeros((10, 10)), chunks=True, compression='gzip')