CIR-KIT / fifth_robot_pkg

CIR-KIT5 の開発レポジトリ
BSD 3-Clause "New" or "Revised" License
10 stars 7 forks source link

yamlのパースとその取り扱い #96

Closed yasu80 closed 6 years ago

yasu80 commented 7 years ago

例えばこんな感じでバーっと取り出してきたとして,

yasu17@mobile:~/workspace/robots/fifth_robot_pkg/src/yaml_reader/src$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
 f = open('waypoint.yaml' , 'r')
 print(f)
open file 'waypoint.yaml', mode 'r' at 0x7f5bcbea9540>
 data = yaml.load(f)
raceback (most recent call last):
 File "<stdin>", line 1, in <module>
ameError: name 'yaml' is not defined
 import yaml
 data = yaml.load(f)
 print(data)
[{'level_acculate': 1.0, 'name': 'start', 'y': 10.0, 'x': 10.0, 'type': 'passing', 'level_alert': 3}, {'level_acculate': 0.5, 'name': 'gate', 'y': 10.0, 'x': 20.0, 'type': 'gate', 'level_alert': 5}, {'y': 15.0, 'x': 25.0, 'radius': 0.5, 'level_alert': 5}, {'y': 30.0, 'x': 30.0}, {'flag': 'finish', 'radius': 0.5, 'name': 'goal', 'y': 20, 'x': 20, 'inportance': 4}]
> 

これをブロック番号( 中括弧{}の順番 ) + 中カッコ内キー名のみで参照したい. 確かにインデックスに, 例えばNoみたいなキーを追加してオリジナルな番号が触れ_れば_いいんですけれど, 多分現場で番号を一個中抜きして一個増やしてとか悪夢なのでしません.

ダーティなコードになりますけど, 頭に使わないインデックスを一個追加して

wps: 
  - number: 0
    name: start
    x: 10
    y: 10
    inportance: 1
    radius: 1.5
    drag: 5

  - number: 1
    name: gate
    x: 10
    y: 20
    inportance: 2
    radius: 2.5
    drag: 3

に対して


#!/usr/bin/env python
# coding UTF-8

import yaml
import rospy

from std_msgs.msg import String

FILEIN_DICT = "waypoint.yaml"#Rename!

f = open(FILEIN_DICT, 'r')
waypoints = yaml.load(f)
f.close()

def checkImportance():
    if waypoints["wps"][0]["inportance"] == 1:

的な参照も一応可能だが・・・ cecd71864d5d2f527da8f060515f0eaeb949b2c0 PYYAMLのサンプルとか参考文献とか少なすぎて蛇生えますよ

yasu80 commented 7 years ago

とりあえず汚い方法で実装します. 辞書型への理解みが浅いのが原因なんですけど

yasu80 commented 6 years ago

全然時間が足りませんでしたが, これもそのうち実装します 構成を再度変更するときにここを参照します