Python HDF5 H5Py无法打开多个文件问题

5
我正在使用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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接