development

파이썬에서 YAML 파일을 구문 분석하는 방법

big-blog 2020. 2. 11. 22:34
반응형

파이썬에서 YAML 파일을 구문 분석하는 방법


파이썬에서 YAML 파일을 어떻게 구문 분석 할 수 있습니까?


C 헤더에 의존하지 않는 가장 쉽고 순수한 방법은 PyYaml ( documentation )입니다.

#!/usr/bin/env python

import yaml

with open("example.yaml", 'r') as stream:
    try:
        print(yaml.safe_load(stream))
    except yaml.YAMLError as exc:
        print(exc)

그리고 그게 다야. 일반 yaml.load()함수도 존재하지만 yaml.safe_load()임의 코드 실행 가능성을 피하기 위해 제공된 임의의 객체 직렬화 / 직렬화가 명시 적으로 필요하지 않는 한 항상 선호해야합니다.

PyYaml 프로젝트는 YAML 1.1 사양을 통한 버전을 지원합니다 . 경우 YAML 1.2 사양 지원이 필요한 참조 ruamel.yaml 에서 언급 한 바와 같이 이 답변 .


Python 2 + 3 및 유니 코드로 YAML 파일 읽기 및 쓰기

# -*- coding: utf-8 -*-
import yaml
import io

# Define data
data = {'a list': [1, 42, 3.141, 1337, 'help', u'€'],
        'a string': 'bla',
        'another dict': {'foo': 'bar',
                         'key': 'value',
                         'the answer': 42}}

# Write YAML file
with io.open('data.yaml', 'w', encoding='utf8') as outfile:
    yaml.dump(data, outfile, default_flow_style=False, allow_unicode=True)

# Read YAML file
with open("data.yaml", 'r') as stream:
    data_loaded = yaml.safe_load(stream)

print(data == data_loaded)

YAML 파일 생성

a list:
- 1
- 42
- 3.141
- 1337
- help
- €
a string: bla
another dict:
  foo: bar
  key: value
  the answer: 42

일반적인 파일 엔딩

.yml.yaml

대안

응용 프로그램의 경우 다음이 중요 할 수 있습니다.

  • 다른 프로그래밍 언어로 지원
  • 읽기 / 쓰기 성능
  • 소형화 (파일 크기)

참조 : 데이터 직렬화 형식 비교

구성 파일을 만드는 방법을 찾고 있다면 짧은 기사 구성 파일을 파이썬 으로 읽으십시오.


YAML 1.2 사양 (2009 릴리스)을 준수하는 YAML 이있는 경우 ruamel.yaml (면책 조항 : 해당 패키지의 작성자 임)을 사용해야합니다. 기본적으로 PyYAML의 상위 집합으로, 대부분의 YAML 1.1 (2005 년)을 지원합니다.

라운드 트립 할 때 의견을 보존하려면 ruamel.yaml을 사용해야합니다.

@Jon의 예제를 업그레이드하는 것은 쉽습니다.

import ruamel.yaml as yaml

with open("example.yaml") as stream:
    try:
        print(yaml.safe_load(stream))
    except yaml.YAMLError as exc:
        print(exc)

safe_load()실제로 입력을 완전히 제어하고 필요하지 않은 경우에는 사용 하지 마십시오.

Path파일 조작에 pathlib 를 사용하는 경우 새로운 API ruamel.yaml이 제공하는 것이 좋습니다.

from ruamel.yaml import YAML
from pathlib import Path

path = Path('example.yaml')
yaml = YAML(typ='safe')
data = yaml.load(path)

yaml 모듈을 가져 와서 파일을 'my_dict'라는 사전에로드하십시오.

import yaml
my_dict = yaml.load(open('filename'))

그게 당신이 필요한 전부입니다. 이제 전체 yaml 파일이 'my_dict'사전에 있습니다.


예:


defaults.yaml

url: https://www.google.com

environment.py

from ruamel import yaml

data = yaml.safe_load(open('defaults.yaml'))
data['url']

ruamel.yaml을 사용 합니다 . 세부 정보 및 토론 여기 .

from ruamel import yaml

with open(filename, 'r') as fp:
    read_data = yaml.load(fp)

ruamel.yaml의 사용법은 PyYAML의 오래된 사용법과 호환되며 (일부 간단한 해결 가능 문제와 함께) 제공된 링크에 명시된 바와 같이 사용하십시오

from ruamel import yaml

대신에

import yaml

대부분의 문제를 해결합니다.

편집 : PyYAML은 다른 장소에서 유지 관리되는 것으로 나타났습니다.


#!/usr/bin/env python

import sys
import yaml

def main(argv):

    with open(argv[0]) as stream:
        try:
            #print(yaml.load(stream))
            return 0
        except yaml.YAMLError as exc:
            print(exc)
            return 1

if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))

참고 URL : https://stackoverflow.com/questions/1773805/how-can-i-parse-a-yaml-file-in-python



반응형