2012-05-09 61 views
2

はどうすれば自動的にnumpyの中でファイル名や配列名を昇順に処理することができ、各HDFファイル内のいくつかの(HDF5)ファイルと複数のノード:処理(反復処理)

私は名前のHDF5ファイルのシリーズを持っています

20120101.hdf5, 20120102.hdf5, 20120103.hdf5, ..., 20120130.hdf5, 20120131.hdf5 

HDF5ファイルのそれぞれは、複数のアレイの命名が含まれています

array1, array2, array3, ..., array24 

が、私は別々の配列のそれぞれを変更し、新しいHDF5ファイルを対応する作成したいです。例えば、20120101.hdf5を使用して:

import numpy 
import tables 

file = openFile("20120101.hdf5","r") 
b1 = file.root.array1 
c1 = (b1<=1) 
new20120101_array1 = creatArray('/','1',c1) 
c2 = ((b1<=2) and (b>1)) 
new20120101_array1 = creatArray('/','2',c2) 
. 
. 
. 

c20 = ((b1<=20) and (b>19)) 
new20120101_array1 = creatArray('/','20',c20) 

および配列2-24のためにそれを繰り返します。あなたがディレクトリに複数のファイルを持っている場合は、ディレクトリ内のエントリの名前を含むリストを返すos.listdir機能を使用することができます

new20120101.hdf5 ---- new20120101_array1 ---- 1 
               2 
               ... 
               20 
       ---- new20120101_array2 ---- 1 
               ... 
               20 
       ... 
       ---- new20120101_array24 --- 1 
               ... 
               20 
new20120102.hdf5 
.... 
new20120131.hdf5 
+0

質問は正確には何ですか? – user545424

+0

自動的に行うには?手動で名前を変更する代わりに? –

+0

あなたのコードが正しく書かれていない: 'import tables'を実行すると、このモジュールのすべての関数を' tables.function'と書く必要があります。 'file = openFile(...)'と 'new = creatArray(...)'を書くと、うまく動作しません!あなたが書いたときにコードを使用するには、モジュールを 'from tables import openFile、creatArray'または' from tables import * 'として呼び出す必要があります。 – carla

答えて

2

:その結果、私が持っていると思います。

例:あなたの質問の他の部分はすでにother questionに答えている

import os 
import tables 

direc = '/Users/cg/' # the working directory (where your files are stored) 
dirs = os.listdir(direc) 

for idir in dirs: # this will iterate over the files in your working directory 

    if idir.endswith('.he5'): # only for HDF5 files... 
     hdf5 = tables.openFile(os.path.join(direc,idir)) 

     #### DO WHAT YOU WANT WITH EACH FILE! 

     hdf5.close() 

、私は(あなたがwalkNodes機能を使用することができます)と思います。

+0

この例では、ライブラリ[PyTables](http://pytables.github。 com/usersguide/libref.html)を使用してHDF5ファイルを処理します。あなたが使用できる他のライブラリがあります。 – carla

+0

と私はあなたに助言を与えるでしょう... 正確に何が何をしているのか知りたいときは、 'help(function)'と打ちます。例えば、 'os.path.join'が何をしているのかを知るには、' help(os.path.join) 'と書く必要があります:*必要に応じて" \ "を挿入して複数のパス名コンポーネントを結合します。任意のコンポーネントが絶対パスの場合、前のパスコンポーネントはすべて破棄されます。* – carla

+0

すべての回答とアドバイスに感謝します! –

関連する問題