我使用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)
Run Code Online (Sandbox Code Playgroud)
当我使用hdfview之类的东西检查文件时,我知道内部结构是不同的.但是,我得到的csv似乎表明所有文件都包含相同的数据.以前有人见过这种行为吗?我有什么建议可以开始调试这个问题吗?
我得出的结论是,这是以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)
Run Code Online (Sandbox Code Playgroud)