Python HDF5 H5Py打开多个文件时出现问题

发布于 2021-01-29 14:56:21

我要使用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似乎表明所有文件都包含相同的数据。有人见过这种行为吗?在哪里可以开始调试此问题的任何建议?

关注者
0
被浏览
143
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我得出的结论是,这是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)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看