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は、すべてのファイルに同じデータが含まれていることを示しているようです。誰かが以前にこの振る舞いを見たことがありますか?この問題のデバッグを開始するために行くことができる提案はありますか?

4

1 に答える 1

4

これは、インスタンス変数として h5py オブジェクトを使用した Perplexing 代入動作の奇妙な現れであると結論付けました。各ファイルが関数呼び出し内で処理され、変数が再利用されないように、コードを書き直しました。このアプローチを使用すると、同じ奇妙な動作は見られず、はるかにうまく機能しているようです。わかりやすくするために、ソリューションは次のようになります。

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)
于 2011-10-11T17:32:43.437 に答える