Python:
Työskentely YAML:n kanssa

Kuinka:

YAMLin lukeminen ja kirjoittaminen Pythonissa tyypillisesti sisältää kolmannen osapuolen kirjaston käytön, PyYAML ollessa suosituin. Aloittaaksesi sinun täytyy asentaa PyYAML suorittamalla pip install PyYAML.

Esimerkki: Kirjoittaminen YAML-tiedostoon

import yaml

data = {'lista': [1, 42, 3.141, 1337, 'apua', u'€'],
        'merkkijono': 'boo!',
        'toinen sanakirja': {'foo': 'bar', 'avain': 'arvo', 'vastaus': 42}}

with open('esimerkki.yaml', 'w') as f:
    yaml.dump(data, f, default_flow_style=False)

# Tämä luo `esimerkki.yaml` tiedoston datalla rakenteistettuna YAML-muotoon.

Esimerkki: Lukeminen YAML-tiedostosta

import yaml

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

print(datan_ladattu)

# Tuloste: 
# {'lista': [1, 42, 3.141, 1337, 'apua', '€'],
#  'merkkijono': 'boo!',
#  'toinen sanakirja': {'foo': 'bar', 'avain': 'arvo', 'vastaus': 42}}

YAMLin käyttö konfiguraatiossa

Monet ohjelmoijat käyttävät YAMLia sovellusten konfiguraatioiden hallintaan. Tässä on esimerkki siitä, kuinka yksi voisi rakentaa konfiguraatiotiedoston ja lukea sen:

config.yaml:

tietokanta:
  isäntä: localhost
  portti: 5432
  käyttäjätunnus: admin
  salasana: salaisuus

Konfiguraatiotiedoston lukeminen Pythonissa:

import yaml

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

print(config['tietokanta']['isäntä'])  # Tuloste: localhost

Monimutkaisten rakenteiden käsittely

Monimutkaisia rakenteita varten PyYAML mahdollistaa mukautettujen Python-objektien määrittelyn. Kuitenkin, varmista turvallisuuden noudattaminen käyttämällä safe_load välttääksesi mielivaltaisten funktioiden tai objektien suorittamisen.

import yaml

# Määritellään Python-objekti
class Esimerkki:
    def __init__(self, arvo):
        self.arvo = arvo

# Mukautettu konstruktori
def konstruktori_esimerkki(loader, node):
    arvo = loader.construct_scalar(node)
    return Esimerkki(arvo)

# Lisää konstruktori tagille "!esimerkki"
yaml.add_constructor('!esimerkki', konstruktori_esimerkki)

yaml_str = "!esimerkki 'data'"
ladattu = yaml.load(yaml_str, Loader=yaml.FullLoader)

print(ladattu.arvo)  # Tuloste: data

Tässä katkelmassa !esimerkki on mukautettu tagi, jota käytetään instansioimaan Esimerkki objekti arvolla ‘data’ YAML-merkkijonosta. Mukautetut laturit kuten tämä laajentavat PyYAMLin joustavuutta, mahdollistaen monimutkaisempien datarakenteiden ja tyyppien käsittelyn.