Source de footparser.py
1: #!/usr/bin/python
2: # -*- coding: utf-8 -*-
3:
4:
5: from xml.sax import ContentHandler,make_parser
6:
7: import sys
8:
9:
10: class FootHandler(ContentHandler):
11:
12: def __init__ (self):
13: "initialisation du handler"
14: self.nb_nuls = 0
15: self.victoires = {}
16:
17:
18: def startElement(self, name, attrs):
19: "ce que l'on fait pour chaque balise ouvrante"
20:
21: if name=="CHAMPIONNAT":
22: print '<html xmlns="http://www.w3.org/1999/xhtml">'
23: print '<head>'
24: print '<title>Ligue ',attrs['DIVISION'],', saison ',attrs['SAISON'],'</title>'
25: print '<link rel="stylesheet" href="foot.css" />'
26: print '</head>'
27: print '<body>'
28: print '<div class="pagelarge">'
29: print '<h1>Championnat de ligue ',attrs['DIVISION'],
30: print ' saison ',attrs['SAISON'],'</h1>'
31: elif name=="JOURNEE":
32: print '<div class="journee">'
33: print '<h2>Journée ',attrs['NUMERO'],' (',attrs['DATE'],')</h2>'
34: print '<table>'
35: elif name=="RENCONTRE":
36: ed = attrs['DOMICILE']
37: ee = attrs['EXTERIEUR']
38: sd = attrs['SCORED']
39: se = attrs['SCOREE']
40:
41: # sortie de la rencontre
42:
43: print '<tr><td>',ed,'</td><td>',sd,'</td><td>',se,'</td><td>',ee,'</td></tr>'
44:
45:
46: # mise a jour des stats
47: if sd==se:
48: self.nb_nuls += 1
49: elif sd > se:
50: self.victoires[ed] = self.victoires.get(ed,0) + 1
51: else:
52: self.victoires[ee] = self.victoires.get(ee,0) + 1
53:
54:
55: def endElement(self, name):
56: "ce que l'on fait pour chaque balise fermante"
57:
58: if name=="JOURNEE":
59: print '</table>'
60: print '</div>'
61:
62:
63:
64:
65:
66:
67:
68: # Parsing du fichier de résultats
69:
70: fh = FootHandler()
71:
72: parser = make_parser()
73:
74: parser.setContentHandler(fh)
75:
76: parser.parse(sys.argv[1]) # on parse le fichier donné en argument
77:
78:
79:
80: # Quelques stats
81:
82: print '<h2>Statistiques</h2>'
83:
84: print '<p>Nombre de matches nuls :',fh.nb_nuls,'<p>'
85:
86: print '<p>',fh.victoires['Bastia'],' victoires pour Bastia, ', fh.victoires['Lyon'],' pour Lyon.</p>'
87:
88:
89:
90: # Affichage des équipes et de leur nombre de victoires
91:
92: print '<table><tr><th>Équipes</th><th>Victoires</th></tr>'
93:
94: for equipe in fh.victoires.keys():
95: print '<tr><th>',equipe,'</th><td>',fh.victoires[equipe],'</td></tr>'
96:
97: print '</table>'
98:
99: print '<br /><br />'
100:
101: # Tri des équipes par nombre de victoires
102: # en Python 2.4 : couples.sort(key=lambda x : x[1], reverse=True)
103:
104:
105: couples = fh.victoires.items()
106:
107: couples_inverses = [ (c[1],c[0]) for c in couples ]
108:
109: couples_inverses.sort()
110: couples_inverses.reverse()
111:
112: print '<table><tr><th>Équipes</th><th>Victoires</th></tr>'
113:
114: for c in couples_inverses:
115: print '<tr><th>',c[1],'</th><td>',c[0],'</td></tr>'
116:
117: print '</table>'
118:
119:
120: # Fin du HTML
121:
122: print '</div>'
123: print '</body>'
124: print '</html>'
125: