Python에서 YAML 파일을 구문 분석하고 데이터에 액세스합니까?


84

저는 YAML을 처음 사용하며 YAML 파일을 구문 분석하고 구문 분석 된 YAML의 데이터를 사용 / 액세스하는 방법을 찾고 있습니다.

YAML 파일을 구문 분석하는 방법에 대한 설명을 보았습니다. 예를 들어 PyYAML 튜토리얼 , " How can I parse a YAML file in Python ", " Convert Python dict to object? "그러나 내가 찾지 못한 것은 구문 분석 된 YAML 파일에서 데이터에 액세스하는 방법에 대한 간단한 예입니다.

다음과 같은 YAML 파일이 있다고 가정합니다.

 treeroot:
     branch1: branch1 text
     branch2: branch2 text

"branch1 text"텍스트에 어떻게 액세스합니까?

" YAML 구문 분석 및 Python? "이 솔루션을 제공하지만 더 복잡한 YAML 파일에서 데이터에 액세스하는 데 문제가있었습니다. 그리고 구문 분석 된 YAML 파일에서 데이터에 액세스하는 표준 방법이 있는지 궁금합니다. " 트리 반복 "또는 " elementpath "표기법 과 유사한 것 또는 XML 파일을 구문 분석 할 때 사용되는 것입니까?


답변:


152

PyYAML의 yaml.load()함수는 YAML 문서를 네이티브 Python 데이터 구조로 구문 분석 하므로 키 또는 인덱스로 항목에 액세스 할 수 있습니다. 연결 한 질문의 예를 사용하여 :

import yaml
with open('tree.yaml', 'r') as f:
    doc = yaml.load(f)

액세스하려면 branch1 text다음을 사용하십시오.

txt = doc["treeroot"]["branch1"]
print txt
"branch1 text"

YAML 문서에서 branch1키 값이 키 아래에 있기 때문 treeroot입니다.


3
"TypeError : string indices must be integers, not str"이 표시됩니다. 색인에 문자열을 사용할 수없는 것 같습니다.
sattu dec. 05

문자열에 액세스 (인덱싱)하려고 할 수 있습니다. 당신은 너무 깊을 수 있습니다. 액세스하려는 요소에 이미 있습니까?
Aphex

@sattu 키와 값 사이에 공백이 없었기 때문에 동일한 오류가 발생했습니다. 즉 "labelsize : 20"대신 "labelsize : 20"
mateuszb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.