2011-10-06 34 views
5

Utilizo la versión de 64 bits de Enthought Python para procesar datos en múltiples archivos HDF5. Estoy usando h5py versión 1.3.1 (HDF5 1.8.4) en Windows de 64 bits.Python HDF5 H5Py problemas al abrir varios archivos

Tengo un objeto que proporciona una interfaz conveniente para mi jerarquía de datos específica, pero probar el h5py.File (fname, 'r') de forma independiente produce los mismos resultados. Estoy iterando a través de una larga lista (~ 100 archivos a la vez) e intento extraer elementos específicos de información de los archivos. ¡El problema que estoy teniendo es que obtengo la misma información de varios archivos! Mi bucle se ve algo como:

files = glob(r'path\*.h5') 
out_csv = csv.writer(open('output_file.csv', 'rb')) 

for filename in files: 
    handle = hdf5.File(filename, 'r') 
    data = extract_data_from_handle(handle) 
    for row in data: 
    out_csv.writerow((filename,) +row) 

Cuando examino los archivos usando algo así como hdfview, sé que los componentes internos son diferentes. Sin embargo, el csv que recibo parece indicar que todos los archivos contienen los mismos datos. ¿Alguien ha visto este comportamiento antes? ¿Alguna sugerencia donde podría ir para comenzar a depurar este problema?

Respuesta

4

He llegado a la conclusión de que esta es una manifestación extraña de Perplexing assignment behavior with h5py object as instance variable. Reescribí mi código para que cada archivo se maneje dentro de una llamada a función y la variable no se vuelva a utilizar. Usando este enfoque, no veo el mismo comportamiento extraño y parece funcionar mucho mejor. Para mayor claridad, la solución se parece más a:

files = glob(r'path\*.h5') 
out_csv = csv.writer(open('output_file.csv', 'rb')) 

def extract_data_from_filename(filename): 
    return extract_data_from_handle(hdf5.File(filename, 'r')) 

for filename in files: 
    data = extract_data_from_filename(filename) 
    for row in data: 
    out_csv.writerow((filename,) +row) 
Cuestiones relacionadas