Python HDF5 H5Py 打开多个文件的问题

5 投票
1 回答
3170 浏览
提问于 2025-04-17 03:48

我正在使用64位的Enthought Python来处理多个HDF5文件中的数据。我在64位的Windows上使用的是h5py版本1.3.1(HDF5 1.8.4)。

我有一个对象,它提供了一个方便的接口来处理我特定的数据结构,但独立测试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

我发现这是一个奇怪的现象,跟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)

撰写回答