Python:
Arbeider med YAML
Hvordan:
Å lese og skrive YAML i Python innebærer vanligvis bruk av et tredjeparts bibliotek, med PyYAML
som det mest populære. For å komme i gang, må du installere PyYAML ved å kjøre pip install PyYAML
.
Eksempel: Skrive til en YAML-fil
import yaml
data = {'en liste': [1, 42, 3.141, 1337, 'hjelp', u'€'],
'en streng': 'boo!',
'en annen ordbok': {'foo': 'bar', 'nøkkel': 'verdi', 'svaret': 42}}
with open('eksempel.yaml', 'w') as f:
yaml.dump(data, f, default_flow_style=False)
# Dette skaper `eksempel.yaml` med data strukturert i YAML-format.
Eksempel: Lese fra en YAML-fil
import yaml
with open('eksempel.yaml', 'r') as f:
data_loaded = yaml.safe_load(f)
print(data_loaded)
# Utdata:
# {'en liste': [1, 42, 3.141, 1337, 'hjelp', '€'],
# 'en streng': 'boo!',
# 'en annen ordbok': {'foo': 'bar', 'nøkkel': 'verdi', 'svaret': 42}}
Bruk av YAML for konfigurasjon
Mange programmerere bruker YAML for å håndtere applikasjonskonfigurasjoner. Her er et eksempel på hvordan man kan strukturere en konfigfil og lese den:
config.yaml:
database:
vert: localhost
port: 5432
brukernavn: admin
passord: hemmelig
Lese konfigurasjonsfilen i Python:
import yaml
with open('config.yaml', 'r') as f:
config = yaml.safe_load(f)
print(config['database']['vert']) # Utdata: localhost
Håndtering av komplekse strukturer
For komplekse strukturer tillater PyYAML at du definerer tilpassede Python-objekter. Pass imidlertid på å bruke sikre metoder ved å benytte safe_load
for å unngå utførelse av vilkårlige funksjoner eller objekter.
import yaml
# Definer et Python-objekt
class Eksempel:
def __init__(self, verdi):
self.verdi = verdi
# Tilpasset konstruktør
def konstruktør_eksempel(laster, node):
verdi = laster.construct_scalar(node)
return Eksempel(verdi)
# Legg til konstruktør for merket "!eksempel"
yaml.add_constructor('!eksempel', konstruktør_eksempel)
yaml_str = "!eksempel 'data'"
lastet = yaml.load(yaml_str, Loader=yaml.FullLoader)
print(lastet.verdi) # Utdata: data
I dette utdraget er !eksempel
et tilpasset merke brukt til å instansiere et Eksempel
objekt med verdien ‘data’ fra en YAML-streng. Tilpassede lastere som dette utvider fleksibiliteten til PyYAML, som gjør det mulig å behandle mer komplekse datastrukturer og typer.