2011-10-06 10 views
5

私は、複数のHDF5ファイルでデータを処理するためのEnthought Pythonの64ビット版を使用しています。私は64ビットWindowsでh5pyバージョン1.3.1(HDF5 1.8.4)を使用しています。Python HDF5 H5Pyで複数のファイルを開く問題

私は特定のデータ階層に便利なインターフェイスを提供するオブジェクトを持っていますが、h5py.File(fname、 'r')をテストすると独立して同じ結果が得られます。私は、長いリスト(一度に100ファイルまで)を繰り返し、ファイルから特定の情報を取り出そうとしています。私が持っている問題は、私はいくつかのファイルから同じ情報を取得しているということです!私はhdfviewのようなものを使用してファイルを検査するとき

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) 

が、私は内部が異なっている知っている:私のループは次のように見えます。しかし、私が得るcsvは、すべてのファイルに同じデータが含まれていることを示しているようです。誰もこの行動を以前に見たことがありますか?この問題のデバッグを開始するにはどうすればよいですか?

答えて

4

これは、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) 
関連する問題