Python:
Att Arbeta med YAML
Hur man gör:
Att läsa och skriva YAML i Python innebär vanligtvis användningen av ett tredjepartsbibliotek, där PyYAML
är det mest populära. För att komma igång måste du installera PyYAML genom att köra pip install PyYAML
.
Exempel: Skriva till en YAML-fil
import yaml
data = {'en lista': [1, 42, 3.141, 1337, 'hjälp', u'€'],
'en sträng': 'boo!',
'en annan dict': {'foo': 'bar', 'nyckel': 'värde', 'svaret': 42}}
with open('example.yaml', 'w') as f:
yaml.dump(data, f, default_flow_style=False)
# Detta skapar `example.yaml` med datan strukturerad i YAML-format.
Exempel: Läsa från en YAML-fil
import yaml
with open('example.yaml', 'r') as f:
data_loaded = yaml.safe_load(f)
print(data_loaded)
# Utdata:
# {'en lista': [1, 42, 3.141, 1337, 'hjälp', '€'],
# 'en sträng': 'boo!',
# 'en annan dict': {'foo': 'bar', 'nyckel': 'värde', 'svaret': 42}}
Använda YAML för konfiguration
Många programmerare använder YAML för att hantera applikationskonfigurationer. Här är ett exempel på hur man kan strukturera en konfigurationsfil och läsa den:
config.yaml:
databas:
host: localhost
port: 5432
användarnamn: admin
lösenord: hemligt
Läsa konfigurationsfilen i Python:
import yaml
with open('config.yaml', 'r') as f:
config = yaml.safe_load(f)
print(config['databas']['host']) # Utdata: localhost
Hantera Komplexa Strukturer
För komplexa strukturer tillåter PyYAML att du definierar anpassade Python-objekt. Se dock till att använda säkra metoder genom att använda safe_load
för att undvika att utföra godtyckliga funktioner eller objekt.
import yaml
# Definiera ett Python-objekt
class Exempel:
def __init__(self, värde):
self.värde = värde
# Anpassad konstruktor
def konstruktor_exempel(loader, node):
värde = loader.construct_scalar(node)
return Exempel(värde)
# Lägg till konstruktor för taggen "!exempel"
yaml.add_constructor('!exempel', konstruktor_exempel)
yaml_str = "!exempel 'data'"
loaded = yaml.load(yaml_str, Loader=yaml.FullLoader)
print(loaded.värde) # Utdata: data
I detta kodsnutt är !exempel
en anpassad tagg som används för att instansiera ett Exempel
-objekt med värdet ‘data’ från en YAML-sträng. Anpassade laddare som denna utökar flexibiliteten hos PyYAML, vilket möjliggör bearbetning av mer komplexa datastrukturer och typer.