[Python] [python] problema da neofita nel gestire un albero html con due classi

2014-11-26 Per discussione nu...@libero.it
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


[Python] R: [python] problema da neofita nel gestire un albero html con due classi

2014-11-26 Per discussione nu...@libero.it
Edito dicendo che ho capito il problema, e risolto l'esercizio, alla fine nella 
seconda classe, quella che passava il file alla prima restava la radice 
dell'albero mentre nella prima c'erano i figli quindi ho implementato doppi 
metodi per ogni esercizio che dovevo fare.Grazie a tutti voi, se a qualcuno 
servisse il codice me lo dica che lo posto.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python