Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 14, 2015 16:23:28

Ghost678
Зарегистрирован: 2015-12-14
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Написать функции для считывания и записи данных

Написать функции для считывания и записи данных о выбранных сущностях в файл в формате XML. В качестве входных данных дается имя файла, на выходе получается список или словарь объектов классов. Данные в XML-файле и полученные на их основе объекты должны иметь иерархическую структуру.

Классы объектов:
Клиенты (Клиент, Фамилия, Имя, Отчество, Паспортные данные, Комментарий).
Номера (Номер, Количество человек, Комфортность, Цена).
Поселение (Клиент, Номер, Дата поселения, Дата освобождения, Примечание).

Задание нужно в среду

Пример выполнения
Текст файла XML:
1 <library>
2 <author code=“0” surname=“Хорн” name=“Роджер” shortname=“Р”/>
3 <author code=“1” surname=“Джонсон” name=“Чарльз” shortname=“Ч”/>
4 <author code=“2” surname=“Сузи” name=“Роман” shortname=“Р” shortsecname=“А”/>
5 <author code=“3” surname=“Мякишев” name=“Геннадий” secname=“Яковлевич” shortname=“Г” shortsecname=“Я”/>
6 <author code=“4” surname=“Буховцев” name=“Борис” secname=“Борисович” shortname=“Б” shortsecname=“Б”/>
7
8 <publ code=“0” name=’Москва “Мир”’ shortname=“М.: Мир”/>
9 <publ code=“1” name=’Санкт-Петербург “БХВ-Петербург”’ shortname=“СПб.: БХВ-Петербург”/>
10 <publ code=“2” name=’Москва “Просвещение”’ shortname=“М.: Просвещение”/>
11
12 <book code=“0” name=’Матричный анализ’ year=’1989’ pages=’655’ publ=’0’>
13 <author code=’0’/>
14 <author code=’1’/>
15 </book>
16
17 <book code=“1” name=’Python’ year=’2002’ pages=’768’ publ=’1’>
18 <author code=’2’/>
19 </book>
20
21 <book code=“2” name=’Физика: Учебник для 11 класса средней школы’ year=’1991’ pages=’254’ publ=’2’>
22 <author code=’3’/>
23 <author code=’4’/>
24 </book>
25 </library>

1 #-*- coding:utf-8 -*-
2 import os,xml.dom.minidom
3 from prim1 import author,publ,book
5 class library:
6 def __init__(self,datafile=prim2.xml,output=prim2out.xml):
7 self.__datafile=datafile
8 self.__output=output
9 self.__books=[]
10 self.__authors=[]
11 self.__publs=[]
12 def getdatafile(self):return self.__datafile
13 def appendbook(self,value):self.__books.append(value)
14 def appendauthor(self,value):self.__authors.append(value)
15 def appendpubl(self,value):self.__publs.append(value)
16 def readdata(self):
17 dom=xml.dom.minidom.parse(self.__datafile)
18 dom.normalize()
19 for node in dom.childNodes[0].childNodes:
20 if (node.nodeType==node.ELEMENT_NODE)and(node.nodeName==author):
21 self.appendauthor(author())
22 for t in node.attributes.items():
23 if t[0]=="code":self.__authors[-1].setcode(int(t[1]))
24 if t[0]=="name":self.__authors[-1].setname(t[1])
25 if t[0]=="surname":self.__authors[-1].setsurname(t[1])
26 if t[0]=="secname":self.__authors[-1].setsecname(t[1])
27 if t[0]=="shortname":self.__authors[-1].setshortname(t[1])
28 if t[0]=="shortsecname":self.__authors[-1].setshortsecname(t[1])
29 if (node.nodeType==node.ELEMENT_NODE)and(node.nodeName==publ):
30 self.appendpubl(publ())
31 for t in node.attributes.items():
32 if t[0]=="code":self.__publs[-1].setcode(int(t[1]))
33 if t[0]=="name":self.__publs[-1].setname(t[1])
34 if t[0]=="shortname":self.__publs[-1].setshortname(t[1])
35 if (node.nodeType==node.ELEMENT_NODE)and(node.nodeName==book):
36 self.appendbook(book())
37 for t in node.attributes.items():
38 if t[0]=="code":self.__books[-1].setcode(int(t[1]))
39 if t[0]=="name":self.__books[-1].setname(t[1])
40 if t[0]=="year":self.__books[-1].setyear(int(t[1]))
41 if t[0]=="pages":self.__books[-1].setpages(int(t[1]))
42 if t[0]=="publ":
43 l=[p for p in lib.__publs if p.getcode()==int(t[1])]
44 if l:self.__books[-1].setpubl(l[0])
45 for n in node.childNodes:
46 if (n.nodeType==n.ELEMENT_NODE)and(n.nodeName==author):
47 for t in n.attributes.items():
48 if t[0]=="code":
49 l=[a for a in lib.__authors if a.getcode()==int(t[1])]
50 if l:self.__books[-1].appendauthor(l[0])
51 def writedata(self):
52 dom=xml.dom.minidom.Document()
53 root=dom.createElement("library")
54 dom.appendChild(root)
55 for a in self.__authors:
56 aut=dom.createElement("author")
57 aut.setAttribute(code,str(a.getcode()))
58 aut.setAttribute(surname,a.getsurname())
59 aut.setAttribute(name,a.getname())
60 aut.setAttribute(secname,a.getsecname())
61 aut.setAttribute(shortname,a.getshortname())
62 aut.setAttribute(shortsecname,a.getshortsecname())
63 root.appendChild(aut)
64 for p in self.__publs:
65 pub=dom.createElement("publ")
66 pub.setAttribute(code,str(p.getcode()))
67 pub.setAttribute(name,p.getname())
68 pub.setAttribute(shortname,p.getshortname())
69 root.appendChild(pub)
70 for b in self.__books:
71 bk=dom.createElement("book")
72 bk.setAttribute(code,str(b.getcode()))
73 bk.setAttribute(name,b.getname())
74 bk.setAttribute(year,str(b.getyear()))
75 bk.setAttribute(pages,str(b.getpages()))
76 bk.setAttribute(publ,str(b.getpublcode()))
77 for a in b.getauthorcodelist():
78 aut=dom.createElement("author")
79 aut.setAttribute(code,str(a))
80 bk.appendChild(aut)
81 root.appendChild(bk)
82 f = open(self.__output,"w")
83 f.write(dom.toprettyxml(encoding=utf-8))
84 def getbibliostrs(self):return [b.getbibliostr() for b in self.__books]
85
86 lib=library()
87 lib.readdata()
88 for s in lib.getbibliostrs():
89 print s
90 lib.writedata()

Отредактировано Ghost678 (Дек. 14, 2015 16:36:34)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version