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 ทำให้สามารถประมวลผลโครงสร้างข้อมูลและประเภทข้อมูลที่ซับซ้อนยิ่งขึ้นได้