Python मा YAML को पूर्ण गाइड | कन्फिग फाइलदेखि कस्टम ट्यागसम्म

1. YAML के हो?

YAML को परिचय

YAML (YAML Ain’t Markup Language) डेटा सिरियलाइजेसनको एक स्वरूप हो, जसलाई संरचित डेटा अभिव्यक्त गर्न व्यापक रूपमा प्रयोग गरिन्छ। यो JSON र XML जस्तै देखिन्छ, तर YAML को विशेषता यसको सरलता र पढ्न सजिलो हुनु हो। विशेष गरी, इन्डेन्टेशनले स्तरबद्ध संरचना देखाउन सक्ने कारणले, यो मानवले सजिलै पढ्न सक्ने स्वरूप हो, जुन ठूलो फाइदा हो।

JSON र XML सँगको भिन्नता

JSON र XML पनि डेटा वर्णन गर्ने स्वरूपहरू हुन्, तर YAML ले यीसँग तुलना गर्दा अनावश्यक चिन्हहरू कम प्रयोग गर्छ, जसले यसलाई सरल र बुझ्न सजिलो बनाउँछ। उदाहरणका लागि, JSON ले कर्ली ब्रेसेस {} र कमा , धेरै प्रयोग गर्छ, जसले विशेष गरी ठूलो डेटा ह्यान्डल गर्दा दृश्यता घट्न सक्छ। अर्कोतर्फ, YAML ले इन्डेन्टेशनद्वारा संरचना देखाउँछ, जसले दृश्यात्मक रूपमा डेटा को स्तरबद्धता सजिलै बुझ्न मद्दत गर्छ।

Python सँगको अनुकूलता

Python को सिन्ट्याक्स इन्डेन्टेशनद्वारा ब्लक देखाउने संरचना भएकोले, यो YAML को फर्म्याटसँग राम्रोसँग मेल खान्छ। साथै, Python मा YAML ह्यान्डल गर्नको लागि लाइब्रेरी “PyYAML” प्रयोग गरेर, YAML फाइलहरू सजिलै पढ्न‑लेख्न सकिन्छ, र यसलाई कन्फिगरेसन फाइलको रूपमा प्रयोग गर्ने केसहरू धेरै छन्।

2. Python मा YAML फाइल पढ्ने र लेख्ने तरिका

YAML फाइलको पढाइ

YAML फाइललाई Python मा पढ्नको लागि, पहिले “PyYAML” लाइब्रेरी इन्स्टल गर्नुपर्छ, र yaml.safe_load() फङ्क्शन प्रयोग गर्नुहोस्। यो फङ्क्शन सुरक्षित तरिकाले YAML डेटा Python को शब्दकोश वा सूचीमा रूपान्तरण गर्छ। तल आधारभूत पढाइको उदाहरण छ।
import yaml

# YAML फाइल खोलेर सामग्री पढ्ने
with open('config.yaml', 'r') as file:
    data = yaml.safe_load(file)

print(data)
यो कोडले YAML फाइलबाट डेटा पढ्छ र त्यसलाई Python को शब्दकोशको रूपमा प्रयोग गर्छ। उदाहरणका लागि, तलको जस्तो YAML फाइल पढ्ने हो भने।
database:
  host: localhost
  port: 3306
यस अवस्थामा, Python मा तलको जस्तो शब्दकोश प्राप्त हुन्छ।
{'database': {'host': 'localhost', 'port': 3306}}

YAML फाइलको लेखन

Python को डेटा YAML ढाँचामा लेख्नको लागि, yaml.dump() फङ्क्शन प्रयोग गर्नुहोस्। तलको उदाहरणमा, को शब्दकोशलाई YAML फाइलमा लेख्दैछ।
import yaml

data = {
    'name': 'John Doe',
    'age': 30,
    'city': 'New York'
}

with open('output.yaml', 'w') as file:
    yaml.dump(data, file)
यो कोडले शब्दकोश data लाई output.yaml नामको फाइलमा बचत गर्छ। परिणामस्वरूप तलको जस्तो YAML ढाँचाको डेटा उत्पादन हुन्छ।
age: 30
city: New York
name: John Doe

जापानी भाषाको ह्यान्डलिंग

YAML मा जापानी भाषा प्रयोग गर्दा, विशेष गरी अक्षर बिग्रन नदिन allow_unicode=True विकल्प निर्दिष्ट गर्नु महत्त्वपूर्ण छ। यसले YAML फाइलभित्र जापानीको सही प्रदर्शन सुनिश्चित गर्छ।
yaml.dump(data, file, allow_unicode=True)

3. उन्नत YAML अपरेसन

कस्टम ट्यागको सिर्जना

YAML केवल मूलभूत डेटा प्रकारहरू(सूची、शब्दकोश आदि)मात्र होइन, Python वस्तुहरूलाई सिरियलाइज・डिसिरियलाइज गर्न पनि सम्भव छ। यस अवस्थामा, कस्टम ट्याग प्रयोग गरिन्छ। तल Python को क्लासलाई YAML स्वरूपमा बचत गर्ने उदाहरण छ।
import yaml

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

def person_representer(dumper, data):
    return dumper.represent_mapping('!Person', {'name': data.name, 'age': data.age})

def person_constructor(loader, node):
    values = loader.construct_mapping(node)
    return Person(values['name'], values['age'])

yaml.add_representer(Person, person_representer)
yaml.add_constructor('!Person', person_constructor)

# वस्तुलाई YAML मा रूपान्तरण गरी बचत गर्नुहोस्
person = Person('Alice', 25)
with open('person.yaml', 'w') as file:
    yaml.dump(person, file)

# YAML फाइलबाट वस्तु पुनर्निर्माण गर्नुहोस्
with open('person.yaml', 'r') as file:
    loaded_person = yaml.load(file, Loader=yaml.FullLoader)
यसरी, Python को वस्तुहरूलाई कस्टम स्वरूपमा YAML मा बचत गरेर, पछि पुन: प्रयोग गर्न सकिन्छ।

क्रमको संरक्षण

PyYAML मा डिफल्ट रूपमा शब्दकोशको क्रम कायम रहँदैन, त्यसैले क्रम महत्त्वपूर्ण हुने अवस्थामाruamel.yaml प्रयोग गर्न सिफारिस गरिन्छ।ruamel.yaml मा शब्दकोशको कुञ्जीहरूको क्रम कायम रहँदा, क्रम महत्त्वपूर्ण सेटिङ फाइलहरूलाई ह्यान्डल गर्दा उपयोगी हुन्छ।

4. YAML को प्रयोग उदाहरण: सेटिङ फाइल व्यवस्थापन

सेटिङ फाइलको रूपमा YAML को सुविधा

YAML सेटिङ फाइलको रूपमा व्यापक रूपमा प्रयोग गरिन्छ। विशेष गरी Python अनुप्रयोगहरूमा, सेटिङ डेटा व्यवस्थापनको लागि उत्तम स्वरूपको रूपमा प्रयोग हुन्छ। यसको कारण YAML मानवले पनि पढ्न सजिलो र स्तरबद्ध संरचनालाई दृश्यात्मक रूपमा बुझ्न सहज हुन्छ। उदाहरणका लागि, डेटाबेसको जडान जानकारी वा अनुप्रयोगको लग सेटिङ जस्ता जटिल सेटिङहरूलाई एकै साथ व्यवस्थापन गर्न उपयुक्त छ।
database:
  host: localhost
  port: 3306
  username: user
  password: pass

logging:
  level: DEBUG
  file: /var/log/app.log
उपरोक्त जस्तै, धेरै सेटिङहरूलाई संक्षिप्त रूपमा लेख्न सकिन्छ र दृश्यात्मक रूपमा पनि बुझ्न सजिलो हुनु यसको विशेषता हो।

वास्तविक परियोजनामा YAML को प्रयोग उदाहरण

YAML Python फ्रेमवर्कहरू जस्तै Django वा Flask, CI उपकरण CircleCI, तथा कन्टेनर अर्डरन्टेसन उपकरण Kubernetes जस्ता विभिन्न परियोजनाहरूमा प्रयोग गरिन्छ। यी परियोजनाहरूमा मुख्यतया कन्फिगरेसन व्यवस्थापन र वातावरणीय चलहरू (environment variables) को परिभाषामा प्रयोग हुन्छ। Django मा YAML को प्रयोग उदाहरण: Django परियोजनामा, YAML प्रयोग गरेर बाह्य सेटिङ फाइलहरू पढ्न सकिन्छ, जसले डिप्लोइ र वातावरण निर्माणलाई सरल बनाउँछ। सेटिङ फाइलको रूपमा YAML प्रयोग गर्दा, विकास वातावरण वा उत्पादन वातावरण अनुसार विभिन्न सेटिङहरूलाई लचिलो रूपमा व्यवस्थापन गर्न सकिन्छ।
import yaml

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': config['database']['name'],
        'USER': config['database']['username'],
        'PASSWORD': config['database']['password'],
        'HOST': config['database']['host'],
        'PORT': config['database']['port'],
    }
}

JSON र XML सँगको तुलना

YAML सेटिङ फाइलको रूपमा प्रयोग गर्न सजिलो हुनुमा JSON वा XML भन्दा स्पष्ट रूपमा उत्कृष्ट छ। JSON कर्ली ब्रेस र कमासँग विभाजित हुन्छ, जसले लामो फाइलहरूलाई हेर्न कठिन बनाउँछ। XML लाई सुरु ट्याग र अन्त्य ट्याग आवश्यक पर्छ, जसले अक्सर बडो बडो बनाउँछ। अर्कोतर्फ, YAML इन्डेन्टेशनद्वारा स्तरबद्ध संरचना दर्शाउँछ, जसले सेटिङ फाइलको सामग्रीलाई सहज रूपमा बुझ्न मद्दत गर्छ। JSON र YAML को तुलना:
{
  "database": {
    "host": "localhost",
    "port": 3306,
    "username": "user",
    "password": "pass"
  },
  "logging": {
    "level": "DEBUG",
    "file": "/var/log/app.log"
  }
}
database:
  host: localhost
  port: 3306
  username: user
  password: pass

logging:
  level: DEBUG
  file: /var/log/app.log
YAML JSON भन्दा सरल र पढ्न सजिलो भएको स्पष्ट छ।
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. समस्या समाधान र त्रुटि ह्यान्डलिंग

सामान्य त्रुटिहरू र तिनीहरूको समाधान

YAML फाइलहरूलाई ह्यान्डल गर्दा उत्पन्न हुने सामान्य त्रुटिहरू मध्ये एक हो “फाइल अवस्थित छैन” वा “फाइल सही ढाँचामा छैन” जस्ता समस्याहरू। यी त्रुटिहरूलाई उचित त्रुटि ह्यान्डलिंग लागू गरेर रोक्न सकिन्छ। उदाहरणका लागि, यदि YAML फाइलको पार्स त्रुटि उत्पन्न हुन्छ भने, yaml.YAMLError द्वारा अपवादलाई क्याच गर्न सकिन्छ। साथै, फाइल अवस्थित नभएको अवस्थामा, FileNotFoundError लाई ह्यान्डल गरेर प्रयोगकर्तालाई उपयुक्त सन्देश देखाउन सम्भव हुन्छ।
import yaml

def load_yaml(file_path):
    try:
        with open(file_path, 'r') as file:
            data = yaml.safe_load(file)
    except FileNotFoundError:
        print(f"Error: The file {file_path} does not exist.")
        return None
    except yaml.YAMLError as e:
        print(f"Error: Failed to parse YAML file. {e}")
        return None
    return data

config = load_yaml('config.yaml')
if config:
    print(config)

त्रुटि ह्यान्डलिंगको सर्वोत्तम अभ्यास

  1. फाइल अस्तित्व जाँच: फाइल अस्तित्वमा छ कि छैन जाँच गर्नुहोस्, र यदि छैन भने त्रुटि सन्देश देखाउनुहोस्।
  2. पार्स त्रुटिको ह्यान्डलिंग: यदि YAML को सिन्ट्याक्स सही छैन भने, त्रुटि क्याच गरेर विस्तृत सन्देश प्रदान गर्नुहोस्।
  3. लग आउटपुट: समस्या उत्पन्न हुँदा, त्रुटि सन्देशलाई लग फाइलमा रेकर्ड गर्नुहोस्, र पछि समस्या समाधान गर्न सकियोस्।

6. सारांश

YAML एक सरल र मानव पठनीयता उत्कृष्ट डेटा सिरियलाइजेसन ढाँचा हो। Python मा YAML को पढ्ने र लेख्ने कार्य अत्यन्त सरल छ, जसले कन्फिगरेसन फाइलको व्यवस्थापनमा धेरै फाइदा ल्याउँछ। कस्टम ट्यागहरू र क्लासहरूको सिरियलाइजेसन, क्रमको संरक्षण जस्ता उन्नत कार्यहरू पनि सम्भव छन्, र यीलाई प्रयोग गरेर अझ लचिलो र शक्तिशाली अनुप्रयोग सेटिङ व्यवस्थापन सम्भव हुन्छ। YAML को प्रयोग कन्फिगरेसन फाइल व्यवस्थापन मात्र नभई डेटा भण्डारण स्वरूपको रूपमा पनि व्यापक रूपमा प्रयोग भइरहेको छ, र भविष्यमा विभिन्न परियोजनाहरूमा यसको प्रयोगको अपेक्षा गरिन्छ।
侍エンジニア塾