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.