Python - Yaml 파일 파싱하는 방법

PyYaml 라이브러리를 이용하여 Yaml 파일을 파싱하는 방법에 대해서 알아보겠습니다.

1. 파싱할 Yaml 파일

Yaml 형식은 XML 문서보다 가벼우며 가독성이 좋습니다. 그래서 프로젝트 설정 문서 같은데 자주 사용됩니다.

이 글에서는 아래와 같은 형식의 Yaml 파일을 파이썬에서 파싱하려고 합니다.

users:
  - name: John Doe
    age: 30
    city: New York
  - name: Alex
    age: 35
    city: San Jose
  - name: Patrick
    age: 32
    city: Washington

2. Yaml 파싱

Yaml 파일을 아래와 같이 파일로 읽어서, yaml.load()를 사용하여 파싱할 수 있습니다. 파싱된 데이터는 리스트와 딕셔너리 형태로 전달됩니다.

import yaml

file_path = "/tmp/example.yaml"

# Open and parse the YAML file
with open(file_path, "r") as file:
    yaml_data = file.read()
    parsed_data = yaml.load(yaml_data, Loader=yaml.FullLoader)
    print(parsed_data)

Output:

{'users': [{'name': 'John Doe', 'age': 30, 'city': 'New York'}, {'name': 'Alex', 'age': 35, 'city': 'San Jose'}, {'name': 'Patrick', 'age': 32, 'city': 'Washington'}]}

그렇기 때문에, 아래와 같이 구조적으로 개별 속성에 접근할 수 있습니다.

  • parsed_data['users']
  • parsed_data['users'][0]
  • parsed_data['users'][0]['name']
import yaml

file_path = "/tmp/example.yaml"

# Open and parse the YAML file
with open(file_path, "r") as file:
    yaml_data = file.read()
    parsed_data = yaml.load(yaml_data, Loader=yaml.FullLoader)

    print(parsed_data['users'])
    print(parsed_data['users'][0])
    print(parsed_data['users'][0]['name'])
    print(parsed_data['users'][1])
    print(parsed_data['users'][1]['name'])

Output:

[{'name': 'John Doe', 'age': 30, 'city': 'New York'}, {'name': 'Alex', 'age': 35, 'city': 'San Jose'}, {'name': 'Patrick', 'age': 32, 'city': 'Washington'}]
{'name': 'John Doe', 'age': 30, 'city': 'New York'}
John Doe
{'name': 'Alex', 'age': 35, 'city': 'San Jose'}
Alex

3. Yaml 형식의 문자열을 파싱하는 방법

파일의 내용을 파싱하지 않고, Yaml 형식의 문자열로 파싱하려면 아래와 같이 파싱하면 됩니다.

  • 파일에서 텍스트를 가져오는 부분이 생략되고, yaml.load()에 문자열 전달하면 됨
import yaml

yaml_data = """
users:
  - name: John Doe
    age: 30
    city: New York
  - name: Alex
    age: 35
    city: San Jose
  - name: Patrick
    age: 32
    city: Washington
"""

parsed_data = yaml.load(yaml_data, Loader=yaml.FullLoader)
print(parsed_data)

Output:

{'users': [{'name': 'John Doe', 'age': 30, 'city': 'New York'}, {'name': 'Alex', 'age': 35, 'city': 'San Jose'}, {'name': 'Patrick', 'age': 32, 'city': 'Washington'}]}
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha