yaml tutorial comprehensive guide yaml using python
Aquest tutorial de YAML explica què és YAML, conceptes bàsics de YAML com ara tipus de dades, validador de YAML, analitzador, editor, fitxers, etc., amb l'ajuda d'exemples de codi que utilitzen Python:
El processament de text en informàtica ajuda als programadors a crear programes i aplicacions configurables. Els llenguatges de marca tenen un paper fonamental en l’emmagatzematge i l’intercanvi de dades en un format llegible per l’home.
A més, els programadors utilitzen llenguatges de marcatge com a formats d’intercanvi de dades estàndard i comuns entre diferents sistemes. Alguns exemples dels llenguatges de marques inclouen HTML, XML, XHTML i JSON.
Hem compartit informació sobre un llenguatge de marques més en aquest senzill tutorial de YAML.
Aquest tutorial ajuda els lectors a trobar respostes a les preguntes esmentades a continuació. Els estudiants poden fer els primers passos i comprendre el misteri dels llenguatges de marques en general i de YAML en particular.
Les preguntes inclouen:
- Per què necessitem llenguatges de marques?
- Què significa YAML?
- Per què es va crear YAML?
- Per què necessitem aprendre YAML?
- Per què és important avui aprendre YAML?
- Quin tipus de dades puc emmagatzemar en un YAML?
Aquesta guia és útil per a lectors experimentats, ja que discutim conceptes en el context de la programació en general i també en el context de les proves de programari. Aquí també tractarem temes com la serialització i la deserialització.
Què aprendreu:
Què és YAML
Els creadors de YAML el van anomenar inicialment com a 'Un altre llenguatge de marques'. No obstant això, amb el pas del temps, les sigles van canviar a 'YAML Ain't a MarkUp language'. YAML és un acrònim que es refereix a si mateix i que s’anomena acrònim recursiu.
Podem fer servir aquest llenguatge per emmagatzemar dades i configuracions en un format llegible per humans. YAML és un llenguatge elemental per aprendre. Les seves construccions també són fàcils d’entendre.
Clark, Ingy i Oren van crear YAML per abordar la complexitat de la comprensió d'altres llenguatges de marques, que són difícils d'entendre, i la corba d'aprenentatge també és més pronunciada que l'aprenentatge de YAML.
Per fer que l’aprenentatge sigui més còmode, com sempre, fem servir un projecte de mostra. Allotgem aquest projecte a Github amb llicència MIT perquè tothom pugui fer modificacions i enviar una sol·licitud d'extracció si cal.
Podeu clonar el projecte mitjançant l'ordre següent.
git clone git@github.com:h3xh4wk/yamlguide.git
Tanmateix, si cal, podeu fer-ho descarregueu el zip fitxer per al codi i els exemples.
Com a alternativa, els lectors poden clonar aquest projecte amb l'ajut d'IntelliJ IDEA. Completeu la secció de requisits previs per instal·lar Python i configureu-lo amb IntelliJ IDEA abans de clonar el projecte.

Per què necessitem llenguatges de marques?
És impossible escriure-ho tot en codi de programari. Es deu a que de tant en tant hem de mantenir el codi i hem d’abstreure els detalls a fitxers o bases de dades externes.
És una pràctica recomanada reduir el codi al mínim possible i crear-lo de manera que no necessiti modificacions per a diverses entrades de dades que es necessiten.
Per exemple, podem escriure una funció per agafar les dades d’entrada d’un fitxer extern i imprimir el seu contingut línia per línia en lloc d’escriure el codi i les dades juntes en un únic fitxer.
Es considera una bona pràctica perquè separa les preocupacions de crear les dades i crear el codi. L’enfocament de programació d’abstracció de les dades del codi garanteix un fàcil manteniment.
Els llenguatges de marcatge ens faciliten l’emmagatzematge d’informació jeràrquica en un format més accessible i lleuger. Aquests fitxers es poden intercanviar entre programes per Internet sense consumir molta amplada de banda i admeten els protocols més habituals.
Aquests idiomes segueixen un estàndard universal i admeten diverses codificacions per admetre caràcters gairebé de totes les llengües parlades del món.
quina és la màscara de subxarxa adequada per a una xarxa entre dos hosts
El millor dels llenguatges de marques és que el seu ús general no s’associa a cap ordre del sistema, i aquesta característica els fa més segurs i és el motiu de la seva adopció generalitzada i mundial. Per tant, és possible que no trobeu cap ordre YAML que puguem executar directament per crear cap sortida.
Avantatges d'utilitzar un fitxer YAML
YAML té molts avantatges. La taula que es mostra a continuació mostra una comparació entre YAML i JSON. JSON significa JavaScript Object Notation i l’utilitzem com a format d’intercanvi de dades.
Atribut | YAML | JSON |
---|---|---|
Verbositat | Menys detallat | Més detallat |
Tipus de dades | Admet tipus de dades complexos. | No admet tipus de dades complexos. |
Comentaris | Admet escriure comentaris amb '#'. | No admet escriure comentaris. |
Legibilitat | Més llegible per l'home. | Menys llegible per l'home. |
Autoreferències | Admet els elements de referència als mateixos documents mitjançant '&,' i *. | No admet l’autoreferència. |
Diversos documents | Admet diversos documents en un sol fitxer. | Admet un sol document en un sol fitxer. |
A causa dels avantatges de YAML respecte als altres formats de fitxer, com ara JSON, YAML és més freqüent entre els desenvolupadors per la seva versatilitat i flexibilitat.
Prerequisits
Primer instal·lem Python i després configurem Python i els seus paquets amb IntelliJ IDEA. Per tant, instal·leu IntelliJ IDEA si encara no està instal·lat abans de continuar.
Instal·leu Python
Seguiu aquests passos per instal·lar i configurar Python al Windows 10.
Pas 1
Descarregueu Python i instal·leu-lo seleccionant la configuració tal com es mostra a la imatge següent.

Pas 2
Inicieu la configuració i seleccioneu personalitzar la instal·lació. Marqueu la casella de selecció de Addició de Python a PATH .

Pas 3
Personalitzeu la ubicació de Python tal com es mostra a la imatge.

Pas 4
Avanceu amb la instal·lació. Al final de l'assistent d'instal·lació Desactiveu el límit de camí d'accés al Windows fent clic a l'opció de l'Assistent.

Ara, la configuració de Python s'ha completat.
Configureu Python amb IntelliJ IDEA
Configurem ara IntelliJ IDEA amb Python. El primer pas és instal·lar els connectors per poder treballar en projectes Python.
Instal·leu els connectors Python
Instal·leu Python Community Edition

Instal·leu Python Security

Seguiu els passos següents per completar la configuració.
Pas 1
Utilitzeu el menú Fitxer i aneu a la configuració de la plataforma. Feu clic al botó Afegeix el botó SDK .

Pas 2
Seleccioneu el fitxer Opció entorn virtual i seleccioneu l’intèrpret base de Python com l’instal·lat al pas anterior.

Pas 3
Ara seleccioneu l 'entorn virtual creat al pas anterior a la secció Configuració del SDK del projecte .

Recomanem un entorn virtual per a un projecte.
Pas 4 (Opcional)
Obriu el fitxer config.py des de l'explorador de projectes i feu clic a requisits d’instal·lació , tal com es mostra a la imatge següent.

Ignoreu el requisit d'ipython si és necessari desmarcant una opció al quadre de diàleg Tria un paquet.

Ara podeu anar a la següent secció per conèixer els conceptes bàsics de YAML.
Conceptes bàsics de YAML
En aquesta secció, esmentem els conceptes bàsics de YAML amb l'ajut d'un fitxer d'exemple anomenat config.yml i config.py. Creiem fermament que explicar els conceptes de YAML en paral·lel al seu ús en un llenguatge de programació fa que l’aprenentatge sigui millor.
Per tant, mentre expliquem els conceptes bàsics de YAML, també impliquem l’ús de Python per llegir i escriure les dades emmagatzemades a YAML.
Ara creem o obrim config.yml als nostres respectius editors i entenem el YAML.
--- quiz: description: > 'This Quiz is to learn YAML.' questions: - ('How many planets are there in the solar system?', 'Name the non-planet') - 'Who is found more on the web?' - 'What is the value of pi?' - 'Is pluto related to platonic relationships?' - 'How many maximum members can play TT?' - 'Which value is no value?' - 'Don't you know that the Universe is ever-expanding?' answers: - (8, 'pluto') - cats - 3.141592653589793 - true - 4 - null - no # explicit data conversion and reusing data blocks extra: refer: &id011 # give a reference to data x: !!float 5 # explicit conversion to data type float y: 8 num1: !!int '123' # conversion to integer str1: !!str 120 # conversion to string again: *id011 # call data by giving the reference
Fixeu-vos que els fitxers YAML tenen.lyextensió. El llenguatge distingeix entre majúscules i minúscules. Utilitzem espais i no pestanyes per a sagnat.
Juntament amb aquests conceptes bàsics, comprenem els tipus de dades. A la YAML esmentada, hem representat la informació en un qüestionari. Un qüestionari es representa com un node de nivell arrel, que té atributs com una descripció, preguntes i respostes.
Tipus de dades YAML
YAML pot emmagatzemar escalars, seqüències i mapes. Hem mostrat com escriure tots els tipus de dades necessaris al fitxer config.yml.
Els escalars són cadenes, enters, flotants i booleans. Les dades del tipus Strings s’inclouen entre cometes dobles “. Tanmateix, YAML no imposa cadenes d’escriptura entre cometes dobles i podem fer ús de> o | per escriure cadenes llargues en diverses línies.
Mireu els diversos tipus de dades i valors assignats a la taula següent.
Tipus de dades | Exemples de tipus de dades a Config.yml |
---|---|
Corda Les cadenes es poden emmagatzemar amb o sense cometes. | qüestionari: descripció:> Aquest concurs és per aprendre YAML preguntes: - 'Qui es troba més al web?' respostes: - gats |
Enter i flotant Els nombres enters i els flotants s’esmenten en la seva forma original | qüestionari: preguntes: - 'Quin valor té pi?' - 'Quants membres màxims poden jugar a TT?' respostes: - 3.141592653589793 - 4 |
Booleà Els booleans s’emmagatzemen amb la cadena true / false o yes / no | qüestionari: preguntes: - 'Està relacionat Plutó amb les relacions platòniques?' - 'No saps que l'Univers està en expansió?' respostes: - cert - no |
Seqüències Les seqüències es creen amb l'ajut de claudàtors (. | qüestionari: respostes: - (8, 'plutó') |
Referències L’autoreferenciació s’utilitza amb l’ajut de & i * | # conversió explícita de dades i reutilització de blocs de dades extra: refer: & id011 # dóna una referència a les dades # Altres valors de nou: * id011 # dades de trucades donant la referència |
A continuació es detallen alguns dels elements que val la pena assenyalar en un fitxer YAML.
Document
Ara observeu els tres guions -. Significa l’inici d’un document. Emmagatzemem el primer document amb un qüestionari com a element arrel i la descripció, preguntes i respostes com a elements secundaris amb els seus valors associats.
Tipus de dades explícits
Observeu la clau de secció anomenada extra al config.yml. Veiem que amb l’ajut de dobles exclamacions podem mencionar explícitament els tipus de dades dels valors emmagatzemats al fitxer. Convertim un enter a float mitjançant !! float. Utilitzem !! str per convertir un enter a cadena i fem servir !! int per convertir la cadena a un enter.
El paquet YAML de Python ens ajuda a llegir el fitxer YAML i emmagatzemar-lo internament com a diccionari. Python emmagatzema les claus del diccionari com a cadenes i converteix automàticament els valors en tipus de dades de Python tret que s'indiqui explícitament amb '!!'.
Llegiu el fitxer YAML a Python
En general, fem servir l’editor YAML i un validador de YAML en el moment d’escriure YAML. YAML Validator comprova el fitxer en el moment de l’escriptura.
El paquet Python YAML té un analitzador YAML incorporat, que analitza el fitxer abans d’emmagatzemar-lo a la memòria.
Ara anem a crear i obrir config.py als nostres respectius editors amb el contingut següent.
import yaml import pprint def read_yaml(): ''' A function to read YAML file''' with open('config.yml') as f: config = yaml.safe_load(f) return config if __name__ == '__main__': # read the config yaml my_config = read_yaml() # pretty print my_config pprint.pprint(my_config)
Per comprovar que heu completat els passos descrits anteriorment, executeu config.py.
Obriu el fitxer config.py a IntelliJ IDEA, localitzeu el bloc principal i executeu el fitxer mitjançant la icona de reproducció.

Un cop executem el fitxer, veiem la consola amb la sortida.

A la funció read_yaml, obrim el fitxer config.yml i fem servir el mètode safe_load del paquet YAML per llegir el flux com a diccionari Python i després retornem aquest diccionari mitjançant la paraula clau return.
La variable my_config emmagatzema el contingut del fitxer config.yml com a diccionari. Utilitzant el bonic paquet d’impressió de Python anomenat pprint, imprimim el diccionari a la consola.
Fixeu-vos en la sortida anterior. Totes les etiquetes YAML corresponen als tipus de dades de Python perquè el programa pugui utilitzar aquests valors. Aquest procés de construcció d'objectes Python a partir de l'entrada de text s'anomena deserialització.
Escriviu el fitxer YAML a Python
Obriu config.py i afegiu les línies de codi següents just a sota del mètode read_yaml i a sobre del bloc principal del fitxer.
def write_yaml(data): ''' A function to write YAML file''' with open('toyaml.yml', 'w') as f: yaml.dump(data, f)
Al mètode write_yaml, obrim un fitxer anomenat toyaml.yml en mode d’escriptura i fem servir el mètode de bolcat del paquet YAML per escriure el document YAML al fitxer.
Ara afegiu les línies de codi següents al final del fitxer config.py
# write A python object to a file write_yaml(my_config)
Deseu el config.py i executeu el fitxer mitjançant l'ordre següent o mitjançant la icona de reproducció de l'IDE.
python config.py
Veiem que l’ordre anterior imprimeix el contingut de config.yml a la sortida de la consola o del sistema. El programa Python escriu el mateix contingut en un altre fitxer anomenat toyaml.yml. El procés d’escriptura de l’objecte Python en un fitxer extern s’anomena serialització.
Diversos documents a YAML
YAML és bastant versàtil i podem emmagatzemar diversos documents en un sol fitxer YAML.
Creeu una còpia del fitxer config.yml com a configs.yml i enganxeu les línies següents al final del fitxer.
--- quiz: description: | This is another quiz, which is the advanced version of the previous one questions: q1: desc: 'Which value is no value?' ans: Null q2: desc: 'What is the value of Pi?' ans: 3.1415
Tres guions: al fragment anterior marca l'inici d'un document nou al mateix fitxer. Ús de | després de l'etiqueta de descripció ens permet escriure un text de diverses línies de tipus cadena. Aquí, al nou document, hem emmagatzemat les preguntes i les respostes com a assignacions separades imbricades a les preguntes.
Ara creeu un fitxer nou anomenat configs.py i enganxeu el codi esmentat a continuació al fitxer.
import yaml import pprint def read_yaml(): ''' A function to read YAML file''' with open('configs.yml') as f: config = list(yaml.safe_load_all(f)) return config def write_yaml(data): ''' A function to write YAML file''' with open('toyaml.yml', 'a') as f: yaml.dump_all(data, f, default_flow_style=False) if __name__ == '__main__': # read the config yaml my_config = read_yaml() # pretty print my_config pprint.pprint(my_config) # write A python object to a file write_yaml(my_config)
Fixeu-vos en els canvis en les funcions read_yaml i write_yaml. A read_yaml, fem servir el mètode safe_load_all del paquet YAML per llegir tots els documents presents a configs.yml com a llista. De la mateixa manera, a write_yaml, fem servir el mètode dump_all per escriure la llista de tots els documents llegits prèviament en un nou fitxer anomenat toyaml.yml.
Ara executeu configs.py.
python configs.py
La sortida de l'ordre anterior es mostra a continuació.
({'quiz': {'answers': ((8, 'pluto'), 'cats', 3.141592653589793, True, 4, None, False), 'description': 'This Quiz is to learn YAML', 'questions': (('How many planets are there in the solar system?', 'Name the non planet'), 'Who is found more on the web?', 'What is the value of pi?', 'Is pluto related to platonic relationships?', 'How many maximum members can play TT?', 'Which value is no value?', 'Don't you know that Universe is ever-expanding?')}}, {'quiz': {'description': 'This is another quiz, which
' 'is the advanced version of the previous one
', 'questions': {'q1': {'ans': None, 'desc': 'Which value is no value?'}, 'q2': {'ans': 3.1415, 'desc': 'What is the value of Pi?'}}}})
La sortida és similar a la sortida del document únic esmentada anteriorment. Python converteix tots els documents del configs.yml en un diccionari Python. Facilita el processament i l'ús posterior dels valors.
Preguntes freqüents
Podeu trobar-vos amb les preguntes següents mentre treballeu amb YAML.
P # 1) És possible conservar l'ordre de mapes YAML?
Resposta: Sí, és possible personalitzar el comportament predeterminat dels carregadors del paquet pyYAML de Python. Implica l'ús de OrderedDicts i anul·lar el solucionador de base amb mètodes personalitzats, com es mostra aquí .
Q # 2) Com emmagatzemar una imatge a YAML?
Resposta: Podeu codificar una imatge base64 i conservar-la a YAML, tal com es mostra a continuació.
image: !!binary | iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==
Q # 3) Quina diferència hi ha entre> i | etiquetes a YAML?
Resposta: Tant> com | permet escriure valors en diverses línies a YAML. Utilitzem més gran que símbol> per escriure cadenes de diverses línies i | per representar valors literals. Valors escrits amb | no cal escapar-se. Per exemple, podem emmagatzemar HTML utilitzant |.
template: | This is a test paragraph
This is another paragraph
Q # 4) Quina és la importància de ... al final del fitxer YAML.
Resposta: Tres períodes ... són identificadors opcionals. Es poden utilitzar per marcar el final del document en un flux.
P # 5) Com escriure comentaris al fitxer YAML?
Resposta: Utilitzem # per escriure un comentari d'una sola línia. YAML no admet comentaris amb diverses línies. Per tant, hem d’utilitzar # en diverses línies, com es mostra a continuació.
# this is # a single line as well as multi-line # comment
Conclusió
En aquesta guia, hem tractat els passos de preparació de l'entorn de desenvolupament tant en Windows com en Linux per començar a utilitzar YAML. Quasi vam discutir tots els conceptes dels tipus bàsics de dades de YAML, l’editor YAML i l’analitzador YAML.
També hem destacat els avantatges d'utilitzar YAML enfront d'altres llenguatges de marques i hem proporcionat exemples de codi amb l'ajut d'un projecte de mostra de suport. Esperem que ara els estudiants puguin utilitzar YAML per extreure dades de la lògica de l'aplicació per escriure un codi eficient i mantenible.
Feliç aprenentatge !!
Lectura recomanada
- Tutorial Python per a principiants (entrenament pràctic GRATU PyT en Python)
- Introducció i procés d’instal·lació de Python
- Tutorial Python Django: Introducció a Django
- Tutorial de Python DateTime amb exemples
- Tutorial de manipulació de fitxers Python: Com crear, obrir, llegir, escriure
- Tutorial TestComplete: una guia completa de l'eina de proves de GUI per a principiants
- Instruccions de control de Python (Python Continue, Break and Pass)
- Conceptes OOP de Python (classes, objectes i herència de Python)