Python:
การทำงานกับ YAML

วิธีการ:

การอ่านและเขียน YAML ใน Python โดยทั่วไปจะเกี่ยวข้องกับการใช้ไลบรารีภายนอก เช่น PyYAML ซึ่งเป็นที่นิยมที่สุด เพื่อเริ่มต้น คุณจะต้องติดตั้ง PyYAML โดยการรัน pip install PyYAML

ตัวอย่าง: เขียนลงไฟล์ YAML

import yaml

อม = {'a list': [1, 42, 3.141, 1337, 'help', u'€'],
        'a string': 'boo!',
        'another dict': {'foo': 'bar', 'key': 'value', 'the answer': 42}}

with open('example.yaml', 'w') as f:
    yaml.dump(อม, f, default_flow_style=False)

# สิ่งนี้สร้าง `example.yaml` พร้อมข้อมูลที่ถูกจัดรูปแบบใน YAML

ตัวอย่าง: อ่านจากไฟล์ YAML

import yaml

with open('example.yaml', 'r') as f:
    อมลที่โหลด = yaml.safe_load(f)

print(อมลที่โหลด)

# ผลลัพธ์: 
# {'a list': [1, 42, 3.141, 1337, 'help', '€'],
#  'a string': 'boo!',
#  'another dict': {'foo': 'bar', 'key': 'value', 'the answer': 42}}

การใช้ YAML สำหรับการตั้งค่าคอนฟิก

โปรแกรมเมอร์หลายคนใช้ YAML เพื่อจัดการการตั้งค่าคอนฟิกของแอปพลิเคชัน นี่คือตัวอย่างวิธีการโครงสร้างไฟล์คอนฟิกและอ่านมัน:

config.yaml:

database:
  host: localhost
  port: 5432
  username: admin
  password: secret

การอ่านไฟล์คอนฟิกใน Python:

import yaml

with open('config.yaml', 'r') as f:
    config = yaml.safe_load(f)

print(config['database']['host'])  # ผลลัพธ์: localhost

การจัดการกับโครงสร้างที่ซับซ้อน

สำหรับโครงสร้างที่ซับซ้อน PyYAML อนุญาตให้คุณกำหนดอ็อบเจกต์ Python แบบกำหนดเอง อย่างไรก็ตาม ให้แน่ใจว่ามีการปฏิบัติตามมาตรฐานการรักษาความปลอดภัยโดยใช้ safe_load เพื่อหลีกเลี่ยงการเรียกใช้ฟังก์ชันหรืออ็อบเจกต์แบบสุ่ม

import yaml

# กำหนดอ็อบเจกต์ Python
class Example:
    def __init__(self, value):
        self.value = value

# คอนสตรัคเตอร์แบบกำหนดเอง
def constructor_example(loader, node):
    value = loader.construct_scalar(node)
    return Example(value)

# เพิ่มคอนสตรัคเตอร์สำหรับแท็ก "!example"
yaml.add_constructor('!example', constructor_example)

yaml_str = "!example 'ข้อมูล'"
loaded = yaml.load(yaml_str, Loader=yaml.FullLoader)

print(loaded.value)  # ผลลัพธ์: ข้อมูล

ในส่วนนี้, !example เป็นแท็กที่กำหนดเองที่ใช้สำหรับการสร้างอ็อบเจกต์ Example ด้วยค่า ‘ข้อมูล’ จากสตริง YAML โหลดเดอร์ที่กำหนดเองเช่นนี้ขยายความยืดหยุ่นของ PyYAML ทำให้สามารถประมวลผลโครงสร้างข้อมูลและประเภทข้อมูลที่ซับซ้อนยิ่งขึ้นได้