Pythonis YAML-i kasutamine: täielik juhend seadistusfailide ja andmete haldamiseks

1. Mis on YAML?

YAML-i ülevaade

YAML (YAML Ain’t Markup Language) on üks andmete serialiseerimise vormingutest, mida kasutatakse laialdaselt struktureeritud andmete esitamiseks. See sarnaneb JSON-i ja XML-iga, kuid YAML-i peamiseks tugevuseks on selle lihtsus ja loetavus. Eriti kasulik on see, et ta kasutab taandeid hierarhia näitamiseks, mis muudab selle inimesele hõlpsasti loetavaks.

Erinevused JSON-i ja XML-iga

JSON ja XML on samuti andmete kirjeldamiseks kasutatavad vormingud, kuid YAML erineb neist oma vähese süntaktilise liigse märgistuse poolest, olles lihtsam ja arusaadavam. Näiteks JSON kasutab palju looksulge {} ja koma ,, mis võib suurte andmekogumite korral muuta lugemise raskeks. YAML-is näidatakse struktuuri taandega, mis muudab hierarhia visuaalselt paremini mõistetavaks.

Hea sobivus Pythoniga

Pythoni süntaks kasutab plokkide tähistamiseks taandeid, mis teeb selle YAML-iga hästi ühilduvaks. Lisaks saab Pythonis YAML-iga töötada “PyYAML” teegi abil, mis võimaldab YAML-faile lihtsalt lugeda ja kirjutada. Seetõttu kasutatakse YAML-i sageli seadistusfailidena.
Ad

2. Kuidas Pythonis YAML-faile lugeda ja kirjutada

YAML-faili lugemine

YAML-faili lugemiseks Pythonis tuleb esmalt paigaldada “PyYAML” teek ning kasutada yaml.safe_load() funktsiooni. See funktsioon teisendab YAML-andmed turvaliselt Pythoni sõnastikuks või loendiks. Näide:
import yaml

# Ava YAML-fail ja loe sisu
with open('config.yaml', 'r') as file:
    data = yaml.safe_load(file)

print(data)
See kood loeb YAML-faili ja käsitleb seda Pythoni sõnastikuna. Näiteks, kui YAML-fail sisaldab järgmist:
database:
  host: localhost
  port: 3306
Pythonis saadakse järgmine sõnastik:
{'database': {'host': 'localhost', 'port': 3306}}

YAML-faili kirjutamine

Andmete kirjutamiseks YAML-formaati kasutatakse funktsiooni yaml.dump(). Näiteks:
import yaml

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

with open('output.yaml', 'w') as file:
    yaml.dump(data, file)
See kood salvestab sõnastiku data faili output.yaml. Tulemus:
age: 30
city: New York
name: John Doe

Jaapani keele käsitlemine

Kui YAML-failides kasutatakse Jaapani või muid mitte-ladina tähti, on oluline kasutada allow_unicode=True parameetrit, et vältida märgistusvigu.
yaml.dump(data, file, allow_unicode=True)
Ad
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Keerukamad YAML-i toimingud

Kohandatud siltide loomine

YAML võimaldab lisaks põhilistele andmetüüpidele (nimekirjad, sõnastikud) ka Pythoni objektide serialiseerimist ja deserialiseerimist. Selleks saab kasutada kohandatud silte. Näide Pythoni klassi salvestamisest YAML-formaadis:
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)

# Objekti salvestamine YAML-i
person = Person('Alice', 25)
with open('person.yaml', 'w') as file:
    yaml.dump(person, file)

# YAML-failist objekti taastamine
with open('person.yaml', 'r') as file:
    loaded_person = yaml.load(file, Loader=yaml.FullLoader)
Sel moel saab Pythoni objekte salvestada kohandatud YAML-formaadis ja hiljem uuesti kasutada.

Järjekorra säilitamine

PyYAML ei säilita vaikimisi sõnastiku võtmete järjekorda. Kui järjekord on oluline, on soovitatav kasutada ruamel.yaml teeki, mis võimaldab võtmete järjekorra säilitamist.
Ad

4. YAML-i kasutamine: seadistusfailide haldamine

YAML seadistusfailidena

YAML on laialdaselt kasutatav seadistusfailideks. Pythoni rakendustes on see ideaalne, kuna on inimloetav ja hierarhiat on lihtne mõista. Näiteks:
database:
  host: localhost
  port: 3306
  username: user
  password: pass

logging:
  level: DEBUG
  file: /var/log/app.log
Selliselt saab mitmeid seadeid lühidalt ja loetavalt kirjeldada.

Praktilised kasutusnäited

YAML-i kasutatakse laialdaselt projektides nagu Django, Flask, CircleCI ja Kubernetes. Enamasti konfiguratsiooni ja keskkonnamuutujate haldamiseks. Django näide YAML-iga:
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'],
    }
}

Võrdlus JSON-i ja XML-iga

JSON kasutab looksulge ja komasid, mis võivad muuta pikad failid raskesti loetavaks. XML muutub tihti liigselt mahukaks, kuna vajab algus- ja lõputägiseid. YAML aga kasutab taandeid, mis muudab konfiguratsioonid lihtsasti mõistetavaks.
Ad
侍エンジニア塾

5. Vigade käsitlemine ja tõrkeotsing

Levinud vead ja lahendused

Tüüpilised YAML-i töötlemise vead on failide puudumine või vigane formaat. Neid saab vältida korrektse veakäsitlusega.
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: Faili {file_path} ei eksisteeri.")
        return None
    except yaml.YAMLError as e:
        print(f"Error: YAML-parsimine ebaõnnestus. {e}")
        return None
    return data

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

Parimad praktikad

  1. Faili olemasolu kontroll: enne lugemist kontrollida, kas fail eksisteerib.
  2. Süntaksivigade käsitlemine: vigade püüdmine ja detailse teate andmine.
  3. Logimine: vigade logimine tõrkeotsingu hõlbustamiseks.
Ad

6. Kokkuvõte

YAML on lihtne ja inimloetav andmete serialiseerimise formaat. Pythonis on YAML-i lugemine ja kirjutamine väga lihtne, mis teeb sellest ideaalse vahendi konfiguratsioonide haldamiseks. Lisaks saab kasutada kohandatud silte, klasside serialiseerimist ja võtmete järjekorra säilitamist, mis muudavad YAML-i veelgi paindlikumaks. YAML-i kasutamine ei piirdu ainult seadistusfailidega – see sobib ka üldiseks andmete salvestamiseks ning selle kasutus jätkub paljudes projektides.
Ad