728x90
반응형
SMALL
YAML (YAML Ain’t Markup Language)
데이터 쓰기를 위한 또 다른 텍스트 형식이다. YAML은 JSON보다 인간 친화적이므로 소프트웨어에서 작업을 설명하는 데 자주 사용된다.
YAML syntax
Python과 마찬가지로 YAML은 들여쓰기를 사용하여 문서 구조를 지정한다. 그러나 YAML은 공백만 사용할 수 있으며 탭은 사용할 수 없다. 파이썬과의 또 다른 유사점은 # 주석이 줄로 시작하여 줄 끝까지 계속된다는 것이다.
List
목록은 한 줄로 작성할 수 있다.
[switchport mode access, switchport access vlan, switchport nonegotiate, spanning-tree portfast, spanning-tree bpduguard enable]
- switchport mode access
- switchport access vlan
- switchport nonegotiate
- spanning-tree portfast
- spanning-tree bpduguard enable
이러한 블록에 목록을 작성할 때 각 행은 `` - `` (빼기 및 공백)로 시작해야 하며 목록의 모든 행은 동일한 들여쓰기 수준에 있어야 한다.
Dictionary
사전은 한 줄로 작성할 수도 있다.
{vlan: 100, name: IT}
# 또는 블록
vlan: 100
name: IT
Strings
YAML의 문자열은 따옴표로 묶을 필요가 없다. 이것은 편리하지만 때로는 따옴표를 사용해야 합니다. 예를 들어, 특수 문자 (YAML의 경우)가 문자열에 사용되는 경우이다.
예를 들어, 이 줄은 YAML이 올바르게 이해하려면 인용해야 한다.
command: "sh interface | include Queueing strategy:"
Combination of elements
# 두 개의 키가 있는 사전: access 및 trunk. 다음 key에 해당하는 value - command list
access:
- switchport mode access
- switchport access vlan
- switchport nonegotiate
- spanning-tree portfast
- spanning-tree bpduguard enable
trunk:
- switchport trunk encapsulation dot1q
- switchport mode trunk
- switchport trunk native vlan 999
- switchport trunk allowed vlan
# List of dictionaries
- BS: 1550
IT: 791
id: 11
name: Liverpool
to_id: 1
to_name: LONDON
- BS: 1510
IT: 793
id: 12
name: Bristol
to_id: 1
to_name: LONDON
- BS: 1650
IT: 892
id: 14
name: Coventry
to_id: 2
to_name: Manchester
PyYAML module
Python은 PyYAML 모듈을 사용하여 YAML을 사용한다. 표준 모듈 라이브러리의 일부가 아니므로 설치해야 한다.
pip install pyyaml
이것으로 작업하는 것은 csv 및 json 모듈과 유사하다.
Reading from YAML
# YAML 파일에서 Python 객체로 데이터 변환
- BS: 1550
IT: 791
id: 11
name: Liverpool
to_id: 1
to_name: LONDON
- BS: 1510
IT: 793
id: 12
name: Bristol
to_id: 1
to_name: LONDON
- BS: 1650
IT: 892
id: 14
name: Coventry
to_id: 2
to_name: Manchester
# YAML에서 읽기
import yaml
from pprint import pprint
with open('info.yaml') as f:
templates = yaml.safe_load(f)
pprint(templates)
$ python yaml_read.py
[{'BS': 1550,
'IT': 791,
'id': 11,
'name': 'Liverpool',
'to_id': 1,
'to_name': 'LONDON'},
{'BS': 1510,
'IT': 793,
'id': 12,
'name': 'Bristol',
'to_id': 1,
'to_name': 'LONDON'},
{'BS': 1650,
'IT': 892,
'id': 14,
'name': 'Coventry',
'to_id': 2,
'to_name': 'Manchester'}]
Writing to YAML
# YAML에 Python 객체 쓰기
import yaml
trunk_template = [
'switchport trunk encapsulation dot1q', 'switchport mode trunk',
'switchport trunk native vlan 999', 'switchport trunk allowed vlan'
]
access_template = [
'switchport mode access', 'switchport access vlan',
'switchport nonegotiate', 'spanning-tree portfast',
'spanning-tree bpduguard enable'
]
to_yaml = {'trunk': trunk_template, 'access': access_template}
with open('sw_templates.yaml', 'w') as f:
yaml.dump(to_yaml, f, default_flow_style=False)
with open('sw_templates.yaml') as f:
print(f.read())
# sw_templates.yaml 파일
access:
- switchport mode access
- switchport access vlan
- switchport nonegotiate
- spanning-tree portfast
- spanning-tree bpduguard enable
trunk:
- switchport trunk encapsulation dot1q
- switchport mode trunk
- switchport trunk native vlan 999
- switchport trunk allowed vlan
https://pyneng.readthedocs.io/en/latest/book/17_serialization/yaml.html
728x90
반응형
LIST
'Programming > Python' 카테고리의 다른 글
ERROR: Could not install packages due to an OSError: [WinError 5] 액세스가 거부되었습니다 (0) | 2022.08.22 |
---|---|
[Python] shutil (0) | 2022.08.19 |
UnicodeEncodeError: 'cp949' codec can't encode character illegal multibyte sequence (0) | 2022.08.17 |
[Python] JSON (JavaScript Object Notation) (0) | 2022.08.17 |
[Python] CSV (Comma-Separated Value) (0) | 2022.08.17 |