2011-10-06 15 views
5

Sono solito la versione a 64 bit di Enthought Python per elaborare i dati su più file HDF5. Sto usando h5py versione 1.3.1 (HDF5 1.8.4) su Windows 64-bit.Python HDF5 H5Py problemi di apertura di più file

Ho un oggetto che fornisce un'interfaccia comoda alla mia gerarchia di dati specifici, ma testare il file h5py.File (fname, 'r') produce in modo indipendente gli stessi risultati. Sto iterando attraverso una lunga lista (~ 100 file alla volta) e tentando di estrarre informazioni specifiche dai file. Il problema che sto avendo è che sto ottenendo le stesse informazioni da diversi file! Il mio ciclo simile a:

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) 

Quando ho ispezionare i file utilizzando qualcosa di simile hdfview, so che le parti interne sono diversi. Tuttavia, il csv I get sembra indicare che tutti i file contengono gli stessi dati. Qualcuno ha mai visto questo comportamento prima? Qualche suggerimento su dove potrei andare per avviare il debug di questo problema?

risposta

4

Ho concluso che questa è una strana manifestazione di Perplexing assignment behavior with h5py object as instance variable. Ho riscritto il mio codice in modo che ogni file sia gestito all'interno di una chiamata di funzione e la variabile non viene riutilizzata. Utilizzando questo approccio, non vedo lo stesso strano comportamento e sembra funzionare molto meglio. Per chiarezza, la soluzione è più simile 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) 
Problemi correlati