Python HDF5 H5Py проблемы с открытием нескольких файлов
Я использую 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 ответ
Я пришел к выводу, что это странное проявление недопустимого поведения присваивания с 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)