yaml tutorial comprehensive guide yaml using python
Този урок за YAML обяснява какво е YAML, основни концепции на YAML като типове данни, YAML валидатор, парсер, редактор, файлове и др. С помощта на примери за код, използващи Python:
Обработката на текст в компютърните науки помага на програмистите да създават програмируеми програми и приложения. Езиците за маркиране играят жизненоважна роля при съхранението и обмена на данни в разбираем за човека формат.
Освен това програмистите използват езици за маркиране като общи и стандартни формати за обмен на данни между различни системи. Някои примери от езиците за маркиране включват HTML, XML, XHTML и JSON.
Споделихме информация за още един език за маркиране в този лесен за следване урок за YAML.
Този урок помага на читателите да намерят отговори на посочените по-долу въпроси. Обучаемите могат да направят първите стъпки и да разберат тайната на езиците за маркиране като цяло и по-специално YAML.
Въпросите включват:
- Защо се нуждаем от езици за маркиране?
- Какво означава YAML?
- Защо е създаден YAML?
- Защо трябва да научим YAML?
- Защо е важно днес да научите YAML?
- Какъв тип данни мога да съхраня в YAML?
Това ръководство е полезно за опитни читатели, тъй като обсъждаме концепции в контекста на програмирането като цяло, както и в контекста на тестването на софтуер. Тук ще разгледаме и теми като сериализация и десериализация.
Какво ще научите:
Какво е YAML
Създателите на YAML първоначално го нарекоха „Още един език за маркиране“. С течение на времето обаче съкращението се променя на „YAML Ain't MarkUp language“. YAML е съкращение, което се отнася до себе си и се нарича рекурсивно съкращение.
Можем да използваме този език за съхраняване на данни и конфигурация в удобен за четене формат. YAML е елементарен език за учене. Неговите конструкции също са лесни за разбиране.
Кларк, Инги и Орен създадоха YAML за справяне със сложността на разбирането на други маркиращи езици, които са трудни за разбиране, а кривата на обучение също е по-стръмна от изучаването на YAML.
За да направим обучението по-удобно, както винаги, използваме примерен проект. Ние сме домакин на този проект на Github с лиценз MIT, за да може всеки да прави модификации и да подава заявка за изтегляне, ако е необходимо.
Можете да клонирате проекта, като използвате командата по-долу.
git clone git@github.com:h3xh4wk/yamlguide.git
Ако е необходимо обаче можете изтеглете ципа файл за кода и примерите.
Като алтернатива, читателите могат да клонират този проект с помощта на IntelliJ IDEA. Моля, попълнете раздела за предварителните условия за инсталиране на Python и го конфигурирайте с IntelliJ IDEA, преди да клонирате проекта.

Защо се нуждаем от езици за маркиране
Невъзможно е всичко да се напише в софтуерен код. Това е така, защото от време на време трябва да поддържаме код и трябва да абстрахираме спецификата към външни файлове или бази данни.
Най-добрата практика е да намалите кода възможно най-малко и да го създадете по начин, който не се нуждае от модификация за различни входове на данни, които е необходим.
Например, можем да напишем функция, която да взема входни данни от външен файл и да отпечатва съдържанието му ред по ред, вместо да записваме кода и данните заедно в един файл.
Счита се за най-добра практика, тъй като разделя проблемите при създаването на данните и създаването на кода. Подходът за програмиране на извличане на данните от кода осигурява лесна поддръжка.
Езиците за маркиране ни улесняват да съхраняваме йерархична информация в по-достъпен и лек формат. Тези файлове могат да се обменят между програми по интернет, без да консумират голяма честотна лента и да поддържат най-често срещаните протоколи.
Тези езици следват универсален стандарт и поддържат различни кодировки, за да поддържат символи почти от всички говорими езици в света.
каква е подходящата маска на подмрежата за мрежа между два хоста
Най-доброто при езиците за маркиране е, че тяхната обща употреба не е свързана с никакви системни команди и тази характеристика ги прави по-безопасни и е причина за широкото им и световно приемане. Следователно може да не намерите никакви YAML команди, които можем директно да изпълним, за да създадем някакъв изход.
Ползи от използването на YAML файл
YAML има много предимства. Дадената по-долу таблица показва сравнение между YAML и JSON. JSON означава JavaScript Object Notation и ние го използваме като формат за обмен на данни.
Атрибут | ЯМЛ | JSON |
---|---|---|
Многословие | По-малко многословно | По-подробно |
Типове данни | Поддържа сложни типове данни. | Не поддържа сложни типове данни. |
Коментари | Поддържа писане на коментари, използвайки '#'. | Не поддържа писане на коментари. |
Четливост | По-разбираеми от хората. | По-малко четими от хората. |
Самореференции | Поддържа референтни елементи в едни и същи документи, използвайки '&,' и *. | Не поддържа саморефериране. |
Множество документи | Поддържа множество документи в един файл. | Поддържа един документ в един файл. |
Поради предимствата на YAML пред другите файлови формати като JSON, YAML е по-разпространен сред разработчиците поради своята гъвкавост и гъвкавост.
Предварителни условия
Първо инсталираме Python и след това конфигурираме Python и неговите пакети с IntelliJ IDEA. Следователно, моля, инсталирайте IntelliJ IDEA, ако вече не е инсталиран, преди да продължите.
Инсталирайте Python
Следвайте тези стъпки, за да инсталирате и настроите Python на Windows 10.
Етап 1
Изтеглете Python и го инсталирайте, като изберете настройката, както е показано на изображението по-долу.

Стъпка 2
Стартирайте настройката и изберете персонализирайте инсталацията. Поставете отметка в Добавяне на Python към PATH .

Стъпка # 3
Персонализирайте местоположението на Python, както е показано на изображението.

Стъпка # 4
Продължете с инсталацията. В края на инсталационния съветник Деактивирайте ограничението на пътя в Windows, като щракнете върху опцията в съветника.

Сега настройката на Python е завършена.
Конфигурирайте Python с IntelliJ IDEA
Нека сега конфигурираме IntelliJ IDEA с Python. Първата стъпка е да инсталирате Plugins, за да можете да работите по проекти на Python.
Инсталирайте приставки на Python
Инсталирайте изданието на Python Community

Инсталирайте Python Security

Следвайте стъпките по-долу, за да завършите конфигурацията.
Етап 1
Използвайте менюто „Файл“ и отидете в настройките на платформата. Щракнете върху Добавяне на SDK бутон .

Стъпка 2
Изберете Опция за виртуална среда и изберете основния интерпретатор на Python като този, който е инсталиран в предишната стъпка.

Стъпка # 3
Сега изберете виртуалната среда, създадена в предишната стъпка под Проектиране на SDK настройки .

Препоръчваме една виртуална среда за един проект.
Стъпка # 4 (по избор)
Отворете файла config.py от изследователя на проекта и кликнете върху изисквания за инсталиране , както е показано на изображението по-долу.

Игнорирайте изискването за ipython, ако се изисква, като премахнете отметката от опция в диалоговия прозорец Избор на пакет.

Сега можете да преминете към следващия раздел, за да научите основите на YAML.
Основи на YAML
В този раздел споменаваме основите на YAML с помощта на примерен файл, наречен config.yml и config.py. Ние твърдо вярваме, че обяснението на концепциите на YAML паралелно с използването му в програмен език прави ученето по-добро.
Следователно, докато обясняваме основите на YAML, ние също включваме използването на Python за четене и запис на данните, съхранявани в YAML.
Сега нека създадем или отворим config.yml в съответните ни редактори и разберем 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
Забележете, че YAML файловете имат.lyудължаване. Езикът е чувствителен към малки и големи букви. Използваме интервали, а не раздели за отстъп.
Заедно с тези основи, нека разберем типовете данни. В споменатия YAML сме представили информацията в тест. Викторина е изобразена като възел на ниво корен, като има атрибути като описание, въпроси и отговори.
YAML типове данни
YAML може да съхранява скалари, последователности и картографирания. Показахме как да напишем всички необходими типове данни във файла config.yml.
Скаларите са низове, цели числа, плувки и булеви числа. Данните от типа Strings са затворени в двойни кавички “. YAML обаче не налага писане на низове с двойни кавички и ние можем да използваме> или | за писане на дълги низове в множество редове.
Погледнете различните типове данни и картографирани стойности в таблицата по-долу.
Тип данни | Примери за типове данни в Config.yml |
---|---|
Струна Низовете могат да се съхраняват със или без кавички. | тест: описание:> Този тест е да научите YAML въпроси: - „Кой се намира повече в мрежата?“ отговори: - котки |
Цяло число и плуване Целите числа и плувката са споменати в оригиналната им форма | тест: въпроси: - 'Каква е стойността на pi?' - 'Колко максимум членове могат да играят TT?' отговори: - 3.141592653589793 - 4 |
Булев Логическите се съхраняват с помощта на низ true / false или yes / no | тест: въпроси: - „Плутон свързан ли е с платонични взаимоотношения?“ - „Не знаете ли, че Вселената непрекъснато се разширява?“ отговори: - вярно - Недей |
Поредици Последователностите се създават с помощта на квадратни скоби (. | тест: отговори: - (8, 'плутон') |
Препратки Самореферирането се използва с помощта на & и * | # изрично преобразуване на данни и повторно използване на блокове данни допълнително: вижте: & id011 # дайте препратка към данните # Други стойности отново: * id011 # данни за обаждания, като дадете референцията |
По-долу са изброени някои от заслужаващите внимание допълнителни елементи на YAML файл.
Документ
Сега забележете трите чертички -. Това означава началото на документ. Съхраняваме първия документ с тест като основен елемент и описание, въпроси и отговори като дъщерни елементи със свързаните с тях стойности.
Изрични типове данни
Наблюдавайте раздела ключ, наречен допълнително в config.yml. Виждаме, че с помощта на двойни възклицания можем изрично да споменем типовете данни на стойностите, съхранявани във файла. Преобразуваме цяло число в плувка, използвайки !! float. Използваме !! str, за да преобразуваме цяло число в низ и използваме !! int, за да преобразуваме низ в цяло число.
Пакетът YAML на Python ни помага при четенето на YAML файла и го съхраняваме вътрешно като речник. Python съхранява речниковите ключове като низове и автоматично преобразува стойности в типове данни на Python, освен ако изрично не е посочено с използване на '!!'.
Прочетете YAML файла в Python
Като цяло използваме YAML редактора и YAML валидатора по време на писането на YAML. YAML Validator проверява файла по време на писането.
Пакетът Python YAML има вграден YAML парсер, който анализира файла, преди да го съхрани в паметта.
Сега нека създадем и отворим config.py в съответните ни редактори със съдържанието по-долу.
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)
За да проверите дали сте изпълнили описаните по-горе описани стъпки, стартирайте config.py.
Отворете файла config.py в IntelliJ IDEA, намерете основния блок и стартирайте файла, като използвате иконата за възпроизвеждане.

След като стартираме файла, виждаме конзолата с изхода.

Във функцията read_yaml отваряме файла config.yml и използваме метода safe_load на пакета YAML, за да прочетем потока като речник на Python и след това да върнем този речник с помощта на ключовата дума return.
my_config променливата съхранява съдържанието на файла config.yml като речник. Използвайки красивия пакет за печат на Python, наречен pprint, отпечатваме речника на конзолата.
Забележете горния изход. Всички YAML тагове съответстват на типовете данни на Python, така че програмата може допълнително да използва тези стойности. Този процес на конструиране на Python обекти от въвеждането на текст се нарича десериализация.
Напишете YAML файл в Python
Отворете config.py и добавете следните редове код точно под метода read_yaml и над основния блок на файла.
def write_yaml(data): ''' A function to write YAML file''' with open('toyaml.yml', 'w') as f: yaml.dump(data, f)
В метода write_yaml отваряме файл, наречен toyaml.yml в режим на запис и използваме метода за изхвърляне на пакетите YAML, за да напишем YAML документа във файла.
Сега добавете долните редове код в края на файла config.py
# write A python object to a file write_yaml(my_config)
Запазете config.py и стартирайте файла, като използвате командата по-долу или като използвате иконата за възпроизвеждане в IDE.
python config.py
Виждаме, че горната команда отпечатва съдържанието на config.yml към конзолата или изхода на системата. Програмата Python записва същото съдържание в друг файл, наречен toyaml.yml. Процесът на записване на обекта на Python във външен файл се нарича сериализация.
Множество документи в YAML
YAML е доста универсален и ние можем да съхраняваме множество документи в един YAML файл.
Създайте копие на файла config.yml като configs.yml и поставете долните редове в края на файла.
--- 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
Три тирета - в горния фрагмент отбелязва началото на нов документ в същия файл. Използване на | след описателният маркер ни позволява да напишем многоредов текст от тип string. Тук в новия документ сме съхранили въпроси и отговори като отделни съпоставяния, вложени под въпроси.
Сега създайте нов файл, наречен configs.py, и поставете споменатия по-долу код във файла.
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)
Забележете промените във функциите read_yaml и write_yaml. В read_yaml използваме метода safe_load_all на пакета YAML, за да прочетем всички документи, присъстващи в configs.yml като списък. По същия начин в write_yaml използваме метода dump_all, за да запишем списъка с всички преди това прочетени документи в нов файл, наречен toyaml.yml.
Сега стартирайте configs.py.
python configs.py
Резултатът от горната команда се показва по-долу.
({'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?'}}}})
Резултатът е подобен на гореспоменатия изход за единичен документ. Python преобразува всеки документ в configs.yml в речник на Python. Това улеснява по-нататъшната обработка и използване на стойностите.
често задавани въпроси
Възможно е да срещнете въпросите по-долу, докато работите с YAML.
В # 1) Възможно ли е да се запази редът на YAML картографиране?
Отговор: Да, възможно е да персонализирате поведението по подразбиране на товарачите в пакета pyYAML на Python. Включва използването на OrderedDicts и заменяне на базовия разделител с персонализирани методи, както е показано тук .
В # 2) Как да съхранявате изображение в YAML?
Отговор: Можете да base64 кодирате изображение и да го запазите в YAML, както е показано по-долу.
image: !!binary | iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==
В # 3) Каква е разликата между> и | тагове в YAML?
Отговор: И двете> и | позволяват записване на стойности в множество редове в YAML. Използваме по-голямо от символ>, за да напишем многоредови низове и | да представлява буквални стойности. Стойности, написани с | не е необходимо да се избягва. Например, можем да съхраняваме Html, като използваме |.
template: | This is a test paragraph
This is another paragraph
В # 4) Какво е значението на ... в края на YAML файла.
Отговор: Три периода ... са незадължителни идентификатори. Те могат да се използват за маркиране на края на документа в поток.
В # 5) Как да напиша коментари в YAML файла?
Отговор: Използваме #, за да напишем едноредов коментар. YAML не поддържа многоредови коментари. По този начин трябва да използваме # в няколко реда, както е показано по-долу.
# this is # a single line as well as multi-line # comment
Заключение
В това ръководство разгледахме стъпките за подготовка на средата за разработка както в Windows, така и в Linux, за да започнем с YAML. Почти обсъдихме всички концепции за основните типове данни на YAML, YAML редактор и YAML Parser.
Също така подчертахме ползите от използването на YAML по отношение на други езици за маркиране и предоставихме примери за код с помощта на подкрепящ примерен проект. Надяваме се, че сега обучаемите могат да използват YAML за абстрахиране на данни от логиката на приложението, за да напишат ефективен и поддържаем код.
Честито обучение !!
Препоръчително четене
- Урок за Python за начинаещи (практически БЕЗПЛАТНО обучение за Python)
- Процес на въвеждане и инсталиране на Python
- Урок за Python Django - Първи стъпки с Django
- Урок за Python DateTime с примери
- Урок за работа с файлове на Python: Как да създавам, отварям, чета, пиша
- Урок на TestComplete: Изчерпателно ръководство за инструментите за тестване на GUI за начинаещи
- Изявления за контрол на Python (Python Continue, Break and Pass)
- Концепции на ООП на Python (класове, обекти и наследяване на Python)