2016-12-13 5 views
0

市販のソフトウェアで生成されたYAMLファイルを読み込もうとしています。 test.ymlの抜粋は次のようになります。Pythonを使用して複数のキーをカンマで区切ってyamlを解析する

%YAML 1.1 
--- 
VesselTypes: 
    - Name: Tanker 
    Length: 103 
    Draughts: 
     - Name: Draught1 
     Mass: 9017.95 
     MomentOfInertiaTensorX, MomentOfInertiaTensorY, MomentOfInertiaTensorZ: 
      - [254.9374465E3, 1, 2] 
      - [3, 5.979802645E6, 4] 
      - [7, 8, 5.979802645E6] 
      - [9, 10, 11] 

その後、パイソン使ってこのファイルを解析中:データが解析されることが予想されている方法についての

#filename: test.py 
import yaml 

with open('test.yml', 'r') as f: 
     data = yaml.load(f) 

print(data['VesselTypes'][0]['Draughts'][0]['Name']) 

#This would work 
print(data['VesselTypes'][0]['Draughts'][0]['MomentOfInertiaTensorX, MomentOfInertiaTensorY, MomentOfInertiaTensorZ']) 

print('----------------------------------------------------') 
#This would give error 
print(data['VesselTypes'][0]['Draughts'][0]['MomentOfInertiaTensorX']) 

任意の提案を?私はちょうどYAML形式とPythonの両方を学び始めました。少し混乱しました。

+2

' 'MomentOfInertiaTensorX、MomentOfInertiaTensorY、' [[254.9374465E3、0、0]、...] 'マトリックスへの鍵をMomentOfInertiaTensorZ''is。したがって、エラーはあなたが期待するものです! –

+0

私は彼らが単なる情報ヘッダーよりも役に立つと思っていました。したがって、列として値を格納するには、今度は反復ループを実行する必要があります。 – Amitava

+0

私は、コンマで区切られたキーの "アンパック"は実際にYAMLがどのように動作するのかとは思いません。 'MomentOfInertiaTensorX:[254.9374465E3,0,0]'のような3行が必要になるでしょう。 –

答えて

1

リストアンパックを使用してループなしでリストを抽出する。

x_moment, y_moment, z_moment = data['VesselTypes'][0]['Draughts'][0]['MomentOfInertiaTensorX, MomentOfInertiaTensorY, MomentOfInertiaTensorZ'] 
+0

ありがとうございます。しかし、これは最初の行の値をx_momentに、2番目の行をy_momentに、3番目の行をz_momentに格納します。私はこれが明らかであるように私の質問を更新しました。今私は転置を使用する必要がありますか別の方法がありますか? – Amitava

+0

Ah。列単位で格納されている場合は、転置する必要があります。リスト全体を取得し、[この手順](http://stackoverflow.com/a/6473724/600882)を使用して転置を行います。いったん値を取ったら数値で数学をやっていたら、そのリンクでnumpyの解を使ってすべてを配列にする価値があるかもしれません。 –

+1

最終回答: 'numpy as np'、次に' x_moment、y_moment、z_moment = np.transpose(data ['VesselTypes'] [0] [Drafts]] [0] ['MomentOfInertiaTensorX、MomentOfInertiaTensorY、MomentOfInertiaTensorZ']) '。助けてくれてありがとう@Scott Colby。 – Amitava

関連する問題