我使用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似乎表明所有文件都包含相同的数据.以前有人见过这种行为吗?我有什么建议可以开始调试这个问题吗?
最佳答案
我的结论是,这是Perplexing assignment behavior with h5py object as instance variable的奇怪表现.我重新编写了我的代码,以便在函数调用中处理每个文件,并且不重用该变量.使用这种方法,我没有看到相同的奇怪行为,它似乎工作得更好.为清楚起见,解决方案看起来更像:
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)