tms-dos21-onl / anzhalika-tseliak

Apache License 2.0
0 stars 0 forks source link

[HW23] Python (форматы данных) #30

Open AlexPykavy opened 3 months ago

AlexPykavy commented 3 months ago

Дедлайн: 15/05/2024

1. Реализовать конвертер между XML/JSON/YAML форматами, который считывает файл, переданный через аргумент --in-file или же из стандартного потока ввода, и его формат --in-format, и выводит в стандартный поток вывода содержимое файла в формате, переданном через аргумент --out-format.

Для реализации скрипта рекомендуется использовать следующие пакеты/модули:
- xmltodict
- json
- PyYAML или yq

Описание аргументов командной строки скрипта:

./converter.py --in-format {xml|json|yaml} [--in-file <IN_FILE>] --out-format {xml|json|yaml}

Пример использования скрипта:

[root@localhost ~]# cat ./person.xml

<Person>
<FirstName>Ivan</FirstName>
<LastName>Ivanov</LastName>
<Jobs>
<Job>
<Title>Manager</Title>
</Job>
<Job>
<Title>Consultant</Title>
</Job>
</Jobs>
</Person>

[root@localhost ~]# cat ./person.xml | ./converter.py --in-format xml --out-format json

{
"Person": {
"FirstName": "Ivan",
"LastName": "Ivanov",
"Jobs": {
"Job": [
{
"Title": "Manager"
},
{
"Title": "Consultant"
}
]
}
}
}

[root@localhost ~]# ./converter.py --in-format xml --in-file person.xml --out-format yaml

Person:
FirstName: Ivan
Jobs:
Job:
- Title: Manager
- Title: Consultant
LastName: Ivanov

2. (**) Реализовать скрипт extractor.py, который считывает файл, переданный через аргумент --in-file или же из стандартного потока ввода, его формат --in-format и выводит в стандартный поток вывода содержимое файла по пути, переданном через аргумент --path.

Для реализации скрипта рекомендуется использовать следующие пакеты/модули:
- xml.etree.ElementTree
- jsonpath-ng
- yamlpath

Описание аргументов командной строки скрипта:

./extractor.py --in-format {xml|json|yaml} [--in-file <IN_FILE>] --path <PATH>

Пример использования скрипта:
[root@localhost ~]# cat ./person.xml

<Person>
<FirstName>Ivan</FirstName>
<LastName>Ivanov</LastName>
<Jobs>
<Job>
<Title>Manager</Title>
</Job>
<Job>
<Title>Consultant</Title>
</Job>
</Jobs>
</Person>

[root@localhost ~]# cat ./person.xml | ./extractor.py --in-format xml --path /Person/FirstName

Ivan

[root@localhost ~]# cat ./person.xml | ./extractor.py --in-format xml --path /Person/Jobs

<Job>
<Title>Manager</Title>
</Job>
<Job>
<Title>Consultant</Title>
</Job>


** не обязательны к выполнению. Задачи на интерес