Salve a tutti sono un nuovo iscritto alla mailing lista.Ho bisogno di un aiuto
per capire come andare avanti in un esercizio assegnatoci all'universita'.In
pratica devo creare una classe che preso in input un file HTML mi genera
l'albero Html della stessa e poi farci diverse operazioni sopra come contare
nodi e cose simili.Ho gia' fatto un esercizio simile ma senza usare due classi
ma usando una classe sola e una funzione esterna che gli passa il file HTML e
va bene.Purtroppo quando sostituisco alla funzione esterna la classe che mi
chiede l'esercizio iniziano i problemi.Metto l'esempio funzionanteimport html
class HTMLNode(object):
def __init__(self, tag, attr, content, closed=True):
self.tag = tag
self.attr = attr # dizionario degli attributi, se non ci
# sono, e' un dizionario vuoto
self.content = content # se tag = '_text_' contiene il testo,
# altrimenti una lista dei nodi figli
self.closed = closed # True se il nodo ha la chiusura
def istext(self): # per distinguere i nodi testo
return self.tag == '_text_'
def print_tree(self, level=0):
'''Stampa l'albero mostrando la struttura tramite indentazione'''
print ' '*level+str(self),
if self.istext():
print repr(self.content)
else:
print
for node in self.content:
node.print_tree(level+1)
def __str__(self):
'''Ritorna una rapprentazione testuale del nodo'''
left, right = ('', '') if self.tag == '_text_' else ('<', '>')
s = left+self.tag
for k, v in self.attr.items():
s += ' '+k+'="'+v+'"'
return s + right
def count(self):
'''Ritorna il numero di nodi dell'albero'''
cnt = 1
if not self.istext():
for node in self.content:
cnt += node.count()
return cnt
def ParsedHTML(htmlfile):
'''Esegue il parsing HTML del file fhtml e ritorna la radice
dell'albero di parsing'''
with open(htmlfile, 'U') as f:
root = html.parse(f.read(), HTMLNode)
return root
###########################################################################
p = ParsedHTML('file03_01_in.html')
print p.print_tree()
print p.count()
Questo va bene.Il problema è che devo fare la stessa cosa però cambiando al
posto di DEF PARSEDHTML metterci una classe PARSEDHTMLQualcosa di simileclass
ParsedHTML(object):
def __init__(self, htmlfile):
with open(htmlfile, 'U') as f:
root = html.parse(f.read(), HTMLNode)
L'albero me lo crea ma non so poi come fare il count, in pratica non so come
interagirci con l'albero appena creato perche' se faccio p.count mi dice che la
mia classe non ha l'attributo count.Avevo pensato di fare una def count anche
sotto questa classe che mi richiamasse la prima ma non riesco a ricavarmi i
dati del primo costruttore per poi lavorarci su. Dove sbaglio? Come posso
interagire con l'albero appena creato? Qualcuno può aiutarmi a capire? Grazie
mille
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python