2016-06-23 34 views
0

私は1000を超える多くの列を持つHDUListを使用しています。列は、外部コードに適合するクラスタ内の銀河の特性に関連しています。列は 'ser'または 'dev'で終わる必要があります。ただし、列の長さが長すぎて名前が切り捨てられる(例:LOGRE_F3mF2_F850LPseまたはeLOGRE_F3mF2_F850LPs)Python:ヘッダーが存在する場合、変数として使用

データでさまざまな操作を行う関数を定義しています。私は名前がすべて異なっているので、私が欲しい列を体系的に選択するのが苦労しています。カラムは、実際にあるので

def function(xaxisroot,yaxisroot,otheroptions): 
    xaxis = xaxisroot + '_avg_f850lpser' 
    yaxis = yaxisroot + '_F' + str(region[0]) + 'mF' + str(region[1]) + '_f850lpser' 

function('logre','logre') 

: 'LOGRE_avg_F850LPse' 私は(例)エラーが発生しますが:

現在の手順(質問に関連する部分)

KeyError: "Key 'logre_avg_f850lpser' does not exist." 
+0

カラムが 'LOGRE_F3mF2_F850LPse'の場合、なぜxaxis = xaxisroot + '_avg_f850lpser'ですか?確かにこの変数をどこかに使っていて、エラーを返していますか? – AK47

+0

'xaxisroot'はLOGREです。平均値の列と、異なるフィールドの値があります。 (F3mF2)。私はちょうど間違った行を入れた。問題は列名を作成するときに文字制限があると思います(その部分が自分の仕事ではないためわかりません) –

答えて

0

名前が20文字で区切られているようです。カットオフが表示される場所ということから、あなたのkeyは(常に20文字以下であり、かつ、文字列の右端にトリミングを保証

key = root + '_avg_f850lpser' 
key = key[:20] 

:そのような場合、あなたはの線に沿って何かを試すことができます発生する)。

20文字でカットオフ(常に)が発生しない場合は、カットオフ列キーの例をさらに表示する必要があります。

+0

まさに私が探していたものです。どうもありがとうございます! –

0

検出するhasattr(object,property)を使用してみてくださいキーが実際に存在する場合それ以外の場合は、辞書を再構築して、そのような奇妙な名前を持たないようにしてください。

+0

私はそれに似ていると思っていましたが、たくさんのループが必要でした。 –

関連する問題