라즈베리파이반

라즈베리파이 등 컴퓨터계열 게시판입니다.

제목데이터 직렬화 : YAML 파일 작성2022-01-04 01:10
작성자user icon Level 4

88x31.png


YAMLYet Another Markup Language(또 다른 마크업 언어)의 약자로 사람이 읽을 수 있는 데이터 직렬화 언어입니다. 데이터 직렬화에 쓰이는 언어는 xml, json 등이 있습니다. ROS와 홈어시스턴트에 대한 글에서 한번씩 사용했는데 xml은 ROS에서 패키지 설정 파일(package.xml)로 사용되었고 json은 홈어시스턴트 통합 구성요소의 설정 파일(manifest.json)로, yaml 파일은 ROS의 파라미터 파일과 홈어시스턴트 설정 파일(configuration.yaml)로 사용되었습니다.


mb-file.php?path=2022%2F01%2F03%2FF4460_2.png

mb-file.php?path=2022%2F01%2F03%2FF4459_1.png
mb-file.php?path=2022%2F01%2F03%2FF4461_3.png
 

비교해보면 yaml 파일이 xml, json에 비하여 가독성이 좋다는 것을 확인할 수 있습니다.


yaml 파일의 자료형은 스칼라(Scalar), 시퀀스(Sequence), 맵핑(Mapping)으로 구성됩니다.


스칼라(Scalar) 자료형은 문자열(String)이나 숫자(Number)입니다. 문자열은 큰 따온표("")나 작은 따온('')로 구분하기도 합니다.  


맵핑(Mapping) 자료형은 해시(Hash) 또는 딕셔너리(Dictionary) 형식입니다. 콜론(:)으로 키(key)와 값(value)를 구분하며 콜론 뒤에는 공백을 반드시 넣어야합니다. 중괄호 { }를 통해서도 작성가능합니다. 노드는 2개의 공백이나 4개의 공백으로 구분됩니다.


예시:

 robot: {name: sopt, age: 4, manufacture : "Boston Dynamics"}

 robot:

   name: spot

   age: 4

   manufacture : "Boston Dynamics"


시퀀스(Sequence) 자료형은 배열(array) 또는 리스트(list) 형식입니다. 대시(-)를 통해 표시하며, 대괄호 [ ] 를 통해서도 작성가능합니다.


예시: 

 ros2_interface: [msg, srv, action]

 ros2_interface:

   - msg

   - srv

   - action


불린(Boolean) 자료형은 yes / no 또는 true / false 또는 on / off 를 통해 표현가능합니다.


예시: 

 is_robot: yes

 is_default: false

 auto_start: on


주석(Comment)# 태그를 붙이면 되지만 데이터 표현 중심인 yaml 에서는 주석을 권장하지는 않습니다.


예시: 

 ros2_interface: # ROS2 interface

   - msg # topic interface

   - srv # service interface

   - action # action interface


반복되는 노드는 앰퍼샌드(&)를 붙여 별칭(alias)을 선언하고 별표(*)를 붙여 별칭을 나타냅니다.


예시: 

 interface: &ROS2

   - msg

   - srv

   - action

 ros2: *ROS2



이제 yaml 파일을 작성하고 파이썬을 통해 데이터를 불러오도록 해봅시다.

pip3을 통해 pyyaml 패키지를 설치합시다.

 $ pip3 install pyyaml


yaml 파일을 생성하고 다음과 같이 작성해보세요.

 $ touch example.yaml && xed example.yaml

 # example YAML file.

 

 interface: &ROS2# ROS2 interface

   - msg # topic interface

   - srv # service interface

   - action # action interface

 ros2: *ROS2

mb-file.php?path=2022%2F01%2F04%2FF4462_4.png
 

파이썬 파일을 생성하고 다음과 같이 작성하세요.

 $ touch example.py && xed example.py

 import yaml

 with open('example.yaml', 'r') as f: print(yaml.load(f))

mb-file.php?path=2022%2F01%2F04%2FF4463_5.png
 

파이썬을 실행해보세요.

 $ python3 example.py

mb-file.php?path=2022%2F01%2F04%2FF4464_6.png

#YAML# 데이터 직렬화
댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)