Python:
עבודה עם YAML

איך לעשות:

קריאה וכתיבה של YAML בפייתון כרוכה לרוב בשימוש בספרייה של צד שלישי, כאשר PyYAML היא הפופולרית ביותר. כדי להתחיל, תצטרך להתקין את PyYAML על ידי הרצת pip install PyYAML.

דוגמא: כתיבה לקובץ YAML

import yaml

data = {'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(data, f, default_flow_style=False)

# זה יוצר `example.yaml` עם הנתונים מובנים בפורמט YAML.

דוגמא: קריאה מקובץ YAML

import yaml

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

print(data_loaded)

# פלט: 
# {'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

קריאה של קובץ הקונפיג בפייתון:

import yaml

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

print(config['database']['host'])  # פלט: localhost

טיפול במבנים מורכבים

עבור מבנים מורכבים, PyYAML מאפשרת לך להגדיר אובייקטים פייתון מותאמים אישית. עם זאת, ודא שאתה מנהל את התהליך באופן בטוח על ידי שימוש ב-safe_load כדי למנוע הרצת פונקציות או אובייקטים שרירותיים.

import yaml

# הגדרת אובייקט פייתון
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 'data'"
loaded = yaml.load(yaml_str, Loader=yaml.FullLoader)

print(loaded.value)  # פלט: data

בקטע קוד זה, !example הוא תג מותאם לייצוג אובייקט של Example עם הערך ‘data’ ממחרוזת YAML. טועני טעינה מותאמים כמו זה מרחיבים את הגמישות של PyYAML, מאפשרים עיבוד של מבני נתונים וסוגים מורכבים יותר.