Python HDF5 H5Py проблемы с открытием нескольких файлов - PullRequest
5 голосов
/ 06 октября 2011

Я использую 64-битную версию Enthought Python для обработки данных в нескольких файлах HDF5. Я использую h5py версии 1.3.1 (HDF5 1.8.4) на 64-битной Windows.

У меня есть объект, который предоставляет удобный интерфейс для моей конкретной иерархии данных, но тестирование h5py.File (fname, 'r') независимо дает те же результаты. Я перебираю длинный список (~ 100 файлов за раз) и пытаюсь извлечь из файлов определенные фрагменты информации. Проблема в том, что я получаю одну и ту же информацию из нескольких файлов! Мой цикл выглядит примерно так:

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)

Когда я проверяю файлы, используя что-то вроде hdfview, я знаю, что внутренние компоненты разные. Тем не менее, CSV, который я получаю, указывает, что все файлы содержат одинаковые данные. Кто-нибудь видел такое поведение раньше? Любые предложения, где я мог бы пойти, чтобы начать отладку этой проблемы?

1 Ответ

4 голосов
/ 11 октября 2011

Я пришел к выводу, что это странное проявление Запутывающее поведение присваивания с h5py объектом в качестве переменной экземпляра .Я переписал свой код так, чтобы каждый файл обрабатывался в вызове функции, а переменная не использовалась повторно.Используя этот подход, я не вижу такого же странного поведения, и кажется, что он работает намного лучше.Для наглядности решение выглядит так:

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