본문 바로가기

Python/공부공부

[Python] Deepdiff, PyYAML 라이브러리 (+ YAML이란?)

 

* Deepdiff 
Python에서 두 개의 데이터 구조(딕셔너리, 리스트, JSON 등)를 비교하여 변경된 부분만 추출할 수 있도록 도와주는 패키지.

설치
pip install deepdiff

 

1) Dictionary 비교

from deepdiff import DeepDiff

dict1 = {"name": "Alice", "age": 25}
dict2 = {"name": "Alice", "age": 30}

diff = DeepDiff(dict1, dict2)
print(diff)

결과

{'values_changed': {"root['age']": {'old_value': 25, 'new_value': 30}}}

 


 

2) List 비교

list1 = [1, 2, 3]
list2 = [1, 3, 2]

diff = DeepDiff(list1, list2, ignore_order=True)
print(diff)

결과

{}


ignore_order=True    => 순서만 다르고 값이 같다면 차이가 없다고 판단.

 


 

3) 중첩 데이터 비교

dict1 = {"user": {"name": "Alice", "age": 25}}
dict2 = {"user": {"name": "Bob", "age": 25}}

diff = DeepDiff(dict1, dict2)
print(diff)

결과

{'values_changed': {"root['user']['name']": {'old_value': 'Alice', 'new_value': 'Bob'}}}

 

 


 

 

* PyYAML 
YAML파일을 Python 객체 or Python 객체를 YAML파일로의 변환을 지원하는 패키지.

설치
pip install pyyaml

 

1) YAML --> Python 객체로 파싱.

yaml.load()  _모든 yaml 데이터 지원 (보안위험)
yaml.safe_load() 
_문자열, 리스트, 딕셔너리 등 기본 데이터 지원 (안전한 데이터 유형만 로드)

import yaml

yaml_data = """
name: Alice
age: 25
hobbies:
  - reading
  - hiking
"""

parsed_data = yaml.safe_load(yaml_data)
print(parsed_data)

결과

{'name': 'Alice', 'age': 25, 'hobbies': ['reading', 'hiking']}

 


 

2) Python 객체 --> YAML 데이터로 직렬화.

yaml.dump()  

data = {
    "name": "Bob",
    "age": 30,
    "hobbies": ["cycling", "cooking"]
}

yaml_output = yaml.dump(data, default_flow_style=False)
print(yaml_output)

결과

age: 30
hobbies:
- cycling
- cooking
name: Bob


default_flow_style=True    => 블록 스타일
default_flow_style=False   => 플로우 스타일
default_flow_style=None *  => 데이터의 복잡도에 따라 자동 설정

 


 

3) YAML파일 읽기/쓰기.

 - 읽기

 

with open("config.yaml", "r") as file:
    data = yaml.safe_load(file)
print(data)

=> config.yaml 파일을 "r" 읽기 모드로 열고 내용읽기
=> yaml데이터를 Python 객체(딕셔너리, 리스트 등)로 변환
=> 출력

 

- 쓰기

with open("output.yaml", "w") as file:
    yaml.dump(data, file)

=> output.yaml 파일을 "w" 쓰기 모드로 열기 (파일이 없다면 생성)
=> Python 객체를 yaml데이터로 변환하여 파일에 저장

 


 

https://rfriend.tistory.com/540

 

[Python] PyYAML로 YAML 파일 읽고 쓰기 (Parse and Serialize YAML in Python)

이전 포스팅에서 Python으로 JSON 데이터 읽고 쓰기, XML 데이터 읽고 쓰기에 대해서 소개한 적이 있습니다. 이번 포스팅에서는 Python의 PyYAML 라이브러리를 이용하여 YAML 파일을 파싱하여 파이썬 객

rfriend.tistory.com

 

 


 

* YAML 이란? (YAML Ain't Markup Language)
YAML 은 사람이 읽기 쉬운 데이터 직렬화 형식으로, 구조화된 데이터를 표현하는 데 사용.
주로 설정 파일, 데이터 저장, 구성 관리 등에 활용.

yaml파일의 공식 확장자는 .yaml 이지만 축약형인 .yml 을 사용하기도 함

 


 

https://en.wikipedia.org/wiki/YAML

 

YAML - Wikipedia

From Wikipedia, the free encyclopedia Human-readable data serialization format YAML (; see § History and name) is a human-readable data serialization language. It is commonly used for configuration files and in applications where data is being stored or

en.wikipedia.org