Хелпикс

Главная

Контакты

Случайная статья





Информатика. Лабораторная работа №4. вариант 13. Задание



 

 

 

Информатика

 

 

Лабораторная работа №4

вариант 13

 

 

                                                                                          

                             

Санкт-Петербург, 2018 г.

 

Задание

1. Изучить форму Бэкуса-Наура.

2. Изучить особенности языков разметки/форматов JSON, YAML, XML, PROTOBUF.

3. Понять устройство страницы с расписанием для своей группы.

4. Исходя из структуры расписания конкретного дня сформировать файл с расписанием в формате, указанном в задании в качестве исходного.

5. Написать программу на языке Python, которая бы осуществляла парсинг и конвертацию исходного файла в новый. НЕЛЬЗЯ использовать готовые библиотеки, кроме re (регулярные выражения в Python)!

Вариант 13: XML -> JSON, среда

Исходный файл:

<friday>
<even>
   <lesson>
       <time>08:20-09:50</time>
       <classroom>304</classroom>
       <place>Кронверкский пр., д.49, лит.А</place>
       <subject>ДИСКРЕТНАЯ МАТЕМАТИКА (ПРАК)</subject>
       <teacher>Раков Сергей Валентинович</teacher>
   </lesson>
   <lesson>
       <time>10:00-11:30</time>
       <classroom>304</classroom>
       <place>Кронверкский пр., д.49, лит.А</place>
       <subject>ДИСКРЕТНАЯ МАТЕМАТИКА (ПРАК)</subject>
       <teacher>Раков Сергей Валентинович</teacher>
   </lesson>
   <lesson>
       <time>11:40-13:10</time>
       <classroom>466</classroom>
       <place>Кронверкский пр., д.49, лит.А</place>
       <subject>ОСНОВЫ ПРОФЕССИОНАЛЬНОЙ ДЕЯТЕЛЬНОСТИ (ЛЕК)</subject>
       <teacher>Клименков Сергей Викторович</teacher>
   </lesson>
   <lesson>
       <time>13:30-15:00</time>
       <classroom>466</classroom>
       <place>Кронверкский пр., д.49, лит.А</place>
       <subject>ПРОГРАММИРОВАНИЕ (ЛЕК)</subject>
       <teacher>Письмак Алексей Евгеньевич</teacher>
   </lesson>
</even>
<odd>
   <lesson>
       <time>11:40-13:10</time>
       <classroom>466</classroom>
       <place>Кронверкский пр., д.49, лит.А</place>
       <subject>ИНФОРМАТИКА (ЛЕК)</subject>
       <teacher>Балакшин Павел Валерьевич</teacher>
   </lesson>
   <lesson>
       <time>13:30-15:00</time>
       <classroom>466</classroom>
       <place>Кронверкский пр., д.49, лит.А</place>
       <subject>ДИСКРЕТНАЯ МАТЕМАТИКА (ЛЕК)</subject>
       <teacher>Поляков Владимир Иванович</teacher>
   </lesson>
   <lesson>
       <time>15:20-16:50</time>
       <classroom>304</classroom>
       <place>Кронверкский пр., д.49, лит.А</place>
       <subject>ИНФОРМАТИКА (ЛАБ)</subject>
       <teacher>Калинин Игорь Владимирович</teacher>
   </lesson>
   <lesson>
       <time>17:00-18:30</time>
       <classroom>304</classroom>
       <place>Кронверкский пр., д.49, лит.А</place>
       <subject>ИНФОРМАТИКА (ЛАБ)</subject>
       <teacher>Калинин Игорь Владимирович</teacher>
   </lesson>
</odd>
</friday>

Выходной файл:

{
"friday" : {
"even" : {
"lesson" : [
{
"time" : "08:20-09:50",
"classroom" : "304",
"place" : "Кронверкский пр., д.49, лит.А",
"subject" : "ДИСКРЕТНАЯ МАТЕМАТИКА (ПРАК)",
"teacher" : "Раков Сергей Валентинович"
},
{
"time" : "10:00-11:30",
"classroom" : "304",
"place" : "Кронверкский пр., д.49, лит.А",
"subject" : "ДИСКРЕТНАЯ МАТЕМАТИКА (ПРАК)",
"teacher" : "Раков Сергей Валентинович"
},
{
"time" : "11:40-13:10",
"classroom" : "466",
"place" : "Кронверкский пр., д.49, лит.А",
"subject" : "ОСНОВЫ ПРОФЕССИОНАЛЬНОЙ ДЕЯТЕЛЬНОСТИ (ЛЕК)",
"teacher" : "Клименков Сергей Викторович"
},
{
"time" : "13:30-15:00",
    "classroom" : "466",
"place" : "Кронверкский пр., д.49, лит.А",
"subject" : "ПРОГРАММИРОВАНИЕ (ЛЕК)",
"teacher" : "Письмак Алексей Евгеньевич"
}
]
},
"odd" : {
"lesson" : [
{
"time" : "11:40-13:10",
"classroom" : "466",
"place" : "Кронверкский пр., д.49, лит.А",
"subject" : "ИНФОРМАТИКА (ЛЕК)",
"teacher" : "Балакшин Павел Валерьевич"
},
{
"time" : "13:30-15:00",
"classroom" : "466",
"place" : "Кронверкский пр., д.49, лит.А",
"subject" : "ДИСКРЕТНАЯ МАТЕМАТИКА (ЛЕК)",
"teacher" : "Поляков Владимир Иванович"
},
{
"time" : "15:20-16:50",
"classroom" : "304",
"place" : "Кронверкский пр., д.49, лит.А",
"subject" : "ИНФОРМАТИКА (ЛАБ)",
"teacher" : "Калинин Игорь Владимирович"
},
{
"time" : "17:00-18:30",
"classroom" : "304",
"place" : "Кронверкский пр., д.49, лит.А",
"subject" : "ИНФОРМАТИКА (ЛАБ)",
"teacher" : "Калинин Игорь Владимирович"
}
]
}
}
}

Код:

import re
xmlFile = open('rasp.xml', 'r', encoding='UTF-8')
next(xmlFile)
jsonFile = open('rasp.json', 'w', encoding='UTF-8')
spaces = " "
tab, lessonCount = 0, 0
tagArr = ['friday', 'even', 'odd', 'lesson']
comma = ''
endTag = False
print('{', file=jsonFile, end='')
for line in xmlFile:
tag = re.search(r'<(\w+)>', line)
if tag:
   tag = tag.group(1)
   if tag == 'lesson':
       jsonLine = '{0}"{1}" : [\n{0}'.format(tab * spaces, tag) if not lessonCount else tab*spaces
       lessonCount +=1
   else:
       jsonLine = '{}"{}" : '.format(tab * spaces, tag
   text = re.search(r'>([\w\s.,():-]+)<', line)
   if text:
       text = text.group(1)
       jsonLine += '"{}"'.format(text)
       print(comma+'\n'+jsonLine, file=jsonFile, end='')
   else:
       print((',' if lessonCount>1 else '')+'\n'+jsonLine+'{', file=jsonFile, end='')
       tab += 1
   endTag = False
else:
   tag = re.search(r'</(\w+)>', line).group(1)
   tab -= 1
   if tag == 'lesson':
       print('\n{0}}}'.format(tab*spaces), file=jsonFile, end='')
   else:
       lessonCount = 0
       if prevtag == 'lesson':
           print('\n{0}]\n{0}}}'.format(tab*spaces), file=jsonFile, end='')
       else:
           print('\n{0}}}'.format(tab*spaces), file=jsonFile, end='')
   endTag = True
prevtag = tag
comma = ',' if prevtag not in tagArr else ''
print('\n}', file=jsonFile)
xmlFile.close()
jsonFile.close()

 

Вывод:

Я потратила очень много времени в попытках поставить запятые там, где надо (видимо построчный перевод не лучшее решение, зато памяти меньше ест).

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.