Re: [Python] Come estrapolare gli attributi da un file xml.
2015-01-26 8:48 GMT+00:00 Marco Giusti marco.giu...@posteo.de: La funzione è richiamata dal parser stesso e quindi non puoi utilizzare il valore returnato. Usare delle variabili globali non è vietato ma puoi utilizzare altre soluzioni, per esempio i metodi di una funzione. Infatti questi sono già legati all'oggetto stesso e quindi hanno già uno stato comune. Ti allego un esempio, abbastanza ridicolo a dire il vero. Dico ma nell'essempio passano un *oggetto* cui hanno appiccicato delle funzioni. Ora perche' farsi male ad aggiungere stato alle funzioni appiccicate all'oggetto quando si potrebbe semplicemente passare un oggetto vero e proprio con il suo stato e nessun obrobrio? -- . ..: -enrico- ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Come estrapolare gli attributi da un file xml.
On Mon, Jan 26 2015, enrico franchi wrote: 2015-01-26 8:48 GMT+00:00 Marco Giusti marco.giu...@posteo.de: La funzione è richiamata dal parser stesso e quindi non puoi utilizzare il valore returnato. Usare delle variabili globali non è vietato ma puoi utilizzare altre soluzioni, per esempio i metodi di una funzione. Infatti questi sono già legati all'oggetto stesso e quindi hanno già uno stato comune. Ti allego un esempio, abbastanza ridicolo a dire il vero. Dico ma nell'essempio passano un *oggetto* cui hanno appiccicato delle funzioni. Ora perche' farsi male ad aggiungere stato alle funzioni appiccicate all'oggetto quando si potrebbe semplicemente passare un oggetto vero e proprio con il suo stato e nessun obrobrio? Non colgo il significato. Comunque l'esempio voleva solo imitare le api di expat e fornirgli un'idea generale della soluzione, non mi sembra che expat fornisca un modo alternativo per gestire gli eventi. Certo si può rendere l'api di expat molto più elegante di quanto non lo è ora, ma non conosco le esigenze di Gollum. Per esempio a me piace molto la programmazione per interfacce ma mi sembra un po' esagerato tutto questo per uno scriptino. m. from __future__ import print_function import zope.interface import xml.parsers.expat class IHandler(zope.interface.Interface): def XmlDeclHandler(version, encoding, standalone): pass def StartDoctypeDeclHandler(doctypeName, systemId, publicId, has_internal_subset): pass # ... def StartElementHandler(name, attributes): pass def EndElementHandler(name): pass def CharacterDataHandler(data): pass def parse(data, ihandler, isfinal=False): parser = xml.parsers.expat.ParserCreate() default = lambda *arguments: None for name in IHandler: setattr(parser, name, getattr(ihandler, name, default)) parser.Parse(data, isfinal) class MyHandler: def StartElementHandler(self, name, attrs): print(Start element:, name, attrs) def EndElementHandler(self, name): print(End element:, name) def CharacterDataHandler(self, data): print(Character data:, repr(data)) data = ?xml version=1.0? parent id=topchild1 name=paulText goes here/child1 child2 name=fredMore text/child2 /parent parse(data, MyHandler()) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Gestionale come lo scrivo?(Was: Walks like Python. Runs like C).
Il 01/25/2015 03:01 PM, Carlo Miron ha scritto: Con Gesù Cristo e gli evangelisti ha funzionato ma parliamo di un software di più di 2000 anni fa :D vaporware, direi. non mi risulta sia mai stato rilasciato ;) Stai guardando il branch sbagliato :-D Alessandro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Gestionale come lo scrivo?(Was: Walks like Python. Runs like C).
Il giorno 26/gen/2015, alle ore 09:50, Alessandro dedalus2...@gmail.com ha scritto: Il 01/25/2015 10:46 AM, Giovanni Porcari ha scritto: Inoltre alle persone che mi hanno contattato in privato, oltre a dare consigli su installazione e modo di procedere, ho dato i nostri contatto skype e la disponibilità a rispondere in immediato ai vari dubbi che potessero avere. ... io ne aiuto direttamente alcuni e poi loro potranno auspicabilmente scrivere quello che hanno capito e formare una documentazione cooperativa e aggiornata. Una volta che avrò imparato a utilizzare Genropy (*) mi porrò il problema di come rendere il favore e pubblicare un po' di documentazione. E in quel momento avrò un altro problema: dove? Inoltre la mia conoscenza sarà comunque parziale: potrò documentare meglio solo ciò che avrò usato. In pratica avrò due strade: - scrivere qualcosa sul mio blog, tipo Starting with Genropy in few steps (già, ancora non ho un blog. Ma c'e' tempo..) - aggiungere un tassello ad una documentazione già esistente Come ho già detto il problema della documentazione è il fatto che DEVE essere perfetta. Una cattiva documentazione è come una segnaletica stradale sbagliata: ti segnala curva pericolosa a destra è invece ti trovi un dosso con curva a gomito a sinistra. Noi abbiamo avuto con noi (e regolarmente retribuito) una persona incaricata di scrivere la documentazione (ovviamente tempestandoci di domande e lavorando gomito a gomito). Purtroppo dopo circa 1 anno la persona in questione ha scoperto la sua vocazione per l'insegnamento e ci ha abbandonato. C'era poi, come ho detto prima il nostro amico Jeff Edwards che si occupava della documentazione e della traduzione in inglese ma dopo la sua scomparsa (che ci ha anche molto colpito e rattristato), non siamo riusciti a trovare chi potesse raccogliere il lavoro. Ovviamente chiunque desiderasse partecipare al progetto di genropy è graditissimo e riceverebbe da noi tutto l'appoggio, l'aiuto e le spiegazioni necessarie a minimizzare la sua fatica e ad avere i migliori risultati. Questa seconda strada ci aiuterebbe, e infatti vedo che hanno già consigliato un servizio tipo https://readthedocs.org/; . Mai utilizzato, ma il concetto che volevo esprimere è quello. Alessandro (*) E' da tempo che ho scaricato Genropy, ma l'unico file che ho letto in questi anni -sigh!- era privo di docstring e commenti, e per questo al Pycon5 vi chiesi cortesemente di aggiungere un qualsiasi tipo di documentazione (eh, vedo che è un argomento nuovo per voi). Mi sono successivamente reso conto di aver letto l'unico file senza commenti.. chiedo venia :-) Beh non avremo i migliori commenti del mondo ma un file senza commenti per fortuna è abbastanza una rarità (oppure è autodocumentante) Ciao G ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Come estrapolare gli attributi da un file xml.
On Mon, Jan 26 2015, Gollum1 wrote: Il 26 gennaio 2015 08:08, Gollum1 gollum1.smeag...@gmail.com ha scritto: Giorno Lista, oggi sono arrivato presto al lavoro, e visto che nessuno rompe, ho ripreso in mano il mio programmino fermo da parecchio... attraverso il modulo requests riesco ad ottenere una stringa contenente l'XML con tutti i parametri dell'utente loggato alla pagina chiamata da requests. sto usando xml.parsers.expat per analizzarla, e vorrei fare in modo che gli attributi che trovo per i vari tag xml vengano restituiti come dizionario {nome_tag: attributo_uri} ho usato questo codice di esempio: https://docs.python.org/3.4/library/pyexpat.html#example e fino a che nelle prove stampo i tag e gli attributi, tutto va bene, ma come faccio a fare il return di una voce di dizionario? pensavo di mettere: def start_element(name, attrs): if 'uri' in attrs.keys(): return{name: attrs['uri']} ma chi è il chiamante effettivo, visto che in realtà è come se io avessi inettato la mia funzione all'interna della classe del parser? Byez -- Gollum1 - http://www.gollumone.it Tesoro, dov'é il mio teoro... naturalmente se uso una variabile esternda al def, la cosa funziona, urls = dict() def start_element(name, attrs): if 'uri' in attrs.keys(): urls[name] = attrs['uri'] personalmente però ho sempre cercato di evitare di usare delle variabili globali all'interno di definizioni di funzioni... se lo faccio solitamente è perché sono comunque all'interno di una classe, ma in questo caso non ho necessità di refernziare una nuova classe solo per l'analisi di questo file xml, una volta ottenuto questi uri non me ne faccio più nulla. mi sto facendo troppe pippe per nulla? La funzione è richiamata dal parser stesso e quindi non puoi utilizzare il valore returnato. Usare delle variabili globali non è vietato ma puoi utilizzare altre soluzioni, per esempio i metodi di una funzione. Infatti questi sono già legati all'oggetto stesso e quindi hanno già uno stato comune. Ti allego un esempio, abbastanza ridicolo a dire il vero. m. from __future__ import print_function class Parser(object): def parse(self, obj): if isinstance(obj, list): self._parse_list(obj) elif isinstance(obj, dict): self._parse_dict(obj) else: self.parse_obj(obj) def _parse_list(self, obj): self.start_list() for el in obj: self.start_list_el() self.parse(el) self.end_list_el() self.end_list() def _parse_dict(self, obj): self.start_dict() for k, v in obj.iteritems(): self.start_dict_key() self.parse(k) self.end_dict_key() self.start_dict_val() self.parse(v) self.end_dict_val() self.end_dict() parse_obj = lambda self, obj: None start_dict_key = end_dict_key = start_list = end_list = \ start_list_el = end_list_el = start_dict_val = end_dict_val = \ lambda self: None class Handler(object): def __init__(self): self._list_first = True self._dict_first = True def start_dict_val(self): if self._dict_first: self._dict_first = False else: print(, , end=) def start_list_el(self): if self._list_first: self._list_first = False else: print(, , end=) def end_dict_key(self): print(: , end=) def start_list(self): print([, end=) def end_list(self): self._list_first = True print(], end=) def start_dict(self): print({, end=) def end_dict(self): self._dict_first = True print(}, end=) def parse_obj(self, obj): print(repr(obj), end=) if __name__ == __main__: parser = Parser() handler = Handler() parser.start_list = handler.start_list parser.end_list = handler.end_list parser.start_dict = handler.start_dict parser.end_dict = handler.end_dict parser.parse_obj = handler.parse_obj parser.start_dict_val = handler.start_dict_val parser.end_dict_key = handler.end_dict_key parser.start_list_el = handler.start_list_el parser.parse([{hello: world}]) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Gestionale come lo scrivo?(Was: Walks like Python. Runs like C).
Con Gesù Cristo e gli evangelisti ha funzionato ma parliamo di un software di più di 2000 anni fa :D E' un falso storico, non vale come esempio. Walter ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Come estrapolare gli attributi da un file xml.
Il 26 gennaio 2015 08:08, Gollum1 gollum1.smeag...@gmail.com ha scritto: Giorno Lista, oggi sono arrivato presto al lavoro, e visto che nessuno rompe, ho ripreso in mano il mio programmino fermo da parecchio... attraverso il modulo requests riesco ad ottenere una stringa contenente l'XML con tutti i parametri dell'utente loggato alla pagina chiamata da requests. sto usando xml.parsers.expat per analizzarla, e vorrei fare in modo che gli attributi che trovo per i vari tag xml vengano restituiti come dizionario {nome_tag: attributo_uri} ho usato questo codice di esempio: https://docs.python.org/3.4/library/pyexpat.html#example e fino a che nelle prove stampo i tag e gli attributi, tutto va bene, ma come faccio a fare il return di una voce di dizionario? pensavo di mettere: def start_element(name, attrs): if 'uri' in attrs.keys(): return{name: attrs['uri']} ma chi è il chiamante effettivo, visto che in realtà è come se io avessi inettato la mia funzione all'interna della classe del parser? Byez -- Gollum1 - http://www.gollumone.it Tesoro, dov'é il mio teoro... naturalmente se uso una variabile esternda al def, la cosa funziona, urls = dict() def start_element(name, attrs): if 'uri' in attrs.keys(): urls[name] = attrs['uri'] personalmente però ho sempre cercato di evitare di usare delle variabili globali all'interno di definizioni di funzioni... se lo faccio solitamente è perché sono comunque all'interno di una classe, ma in questo caso non ho necessità di refernziare una nuova classe solo per l'analisi di questo file xml, una volta ottenuto questi uri non me ne faccio più nulla. mi sto facendo troppe pippe per nulla? Byez -- Gollum1 - http://www.gollumone.it Tesoro, dov'é il mio teoro... ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Come estrapolare gli attributi da un file xml.
2015-01-26 19:06 GMT+00:00 Marco Giusti marco.giu...@posteo.de: On Mon, Jan 26 2015, enrico franchi wrote: 2015-01-26 8:48 GMT+00:00 Marco Giusti marco.giu...@posteo.de: La funzione è richiamata dal parser stesso e quindi non puoi utilizzare il valore returnato. Usare delle variabili globali non è vietato ma puoi utilizzare altre soluzioni, per esempio i metodi di una funzione. Infatti questi sono già legati all'oggetto stesso e quindi hanno già uno stato comune. Ti allego un esempio, abbastanza ridicolo a dire il vero. Dico ma nell'essempio passano un *oggetto* cui hanno appiccicato delle funzioni. Ora perche' farsi male ad aggiungere stato alle funzioni appiccicate all'oggetto quando si potrebbe semplicemente passare un oggetto vero e proprio con il suo stato e nessun obrobrio? Non colgo il significato. Comunque l'esempio voleva solo imitare le api di expat e fornirgli un'idea generale della soluzione, non mi sembra che expat fornisca un modo alternativo per gestire gli eventi. Semplice, hai scritto una cosa nel messaggio e ne hai fatta un'altra nell'esempio. In particolare, l'esempio e' grosso modo come avrei affrontato questo specifico problema, viceversa, nel messaggio suggerisci di usare *metodi di una funzione*. Il che fa pensare a volere, appunto, appiccicare dei metodi ad una funzione. Cosa che ovviamente in Python puoi fare, sebbene non sia in generale una buona idea e non lo sia in questo specifico caso. Da cui il mio messaggio. Immagino con il senno di poi che tu intendessi invece di usare metodi di un oggetto, come appunto hai fatto nell'esempio. Ma le due informazioni contrastanti non erano facili per me da conciliare. -- . ..: -enrico- ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python