Toujours pendant le projet sbackup OOP , je me suis trouvé face à un pépin que j’exposerais et la résolution m’a été offerte gracieusement sur un forum python (vive Gmane) …Bonjour,
Je vous exposerais donc les mails passés sur Gmane (gmane.comp.python.french) [je ne serais jamais allé m’inscrire aussi facilement sur une mailing liste si ce n’était l’existence de Gmane.]]
Mail d’origine
Bonjour,
Je suis nouveau sur cette liste et j’espère trouver de l’aide mais aussi
aider d’autre si j’en ai la possibilité . 🙂
Alors, et cette question à 100 points ?!
Context :
*******
Je développe actuellement une version refactoré de Sbackup ( que j’ose
appeler OOP … mais là n’est pas le débat )
[
.
Dans le cadre de cette application , pour une gestion efficace de la
mémoire , j’ai imaginé une structure, dérivant de la classe « dict » .
Pour plus d’info lire http://tinyurl.com/2j8gun
Problème :
*********
Si vous voulez tester la classe SBdict vous verrez qu’elle se comporte
comme un dictionnaire. Dans cette optique, je voudrais surcharger aussi
la méthode « iteritems() » .
Et c’est là qu’est le problème :
Le principe serait le suivant, j’itère en profondeur jusqu’à tomber sur
« None » puis j’itère 1 fois en -largeur- (je ne sais pas exactement quel
terme utilisé) puis de nouveau en profondeur et ainsi de suite .
Le problème c’est que je n’arrive pas à trouver de documentation sur les
itérateurs qui vont dans ce sens, aussi je me tourne vers vous pour
éclairer ma lanterne 🙂
Cordialement
wattazoum
Réponse un jour après
il suffit de faire une méthode iteritems récursive (ce qui est classique
dans le cas de parcours d’arbres comme celui que tu présentes). La
condition d’arrêt de récursion sera la présence d’un None.
exemple (sous forme de fonction)
import os
def iteritems(sbdict, _path=None):
if _path is None:
_path = []
for dirname,(props, contents) in sbdict.iteritems():
_path.append(dirname)
if contents is None:
yield os.sep.join(_path)
_path.pop()
else:
for path in iteritems(contents, _path):
yield path
for path in iteritems(d):
print path
Ca répond à ta question ?
—
Alexandre Fayolle LOGILAB, Paris (France)
Formations Python, Zope, Plone, Debian:
http://www.logilab.fr/formations
Développement logiciel sur mesure: http://www.logilab.fr/services
Informatique scientifique: http://www.logilab.fr/science
Reprise et maintenance de sites CPS: http://www.migration-cms.com/
Merci Alexandre 🙂
Comme quoi, internet et les communautes sont une grande source de savoir et de richesse.
P.S. :
Referez vous a art53 pour plus d’infos sur Gmane