Форум сайта python.su
Написать функции для считывания и записи данных о выбранных сущностях в файл в формате 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)
Офлайн