IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Représenter un arbre dans une console


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut Représenter un arbre dans une console
    Bonjour,
    je voulais savoir si quelqu'un avait déjà bidouillé quelque chose permettant de faire ceci (source : ce post)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [ Dummy ]-+-[ test ]-+-< __init__.py
              |          +-< x.py
              |          +-< y.py
              |
              +-< zeTest.py
    On peut partir du principe que l'arbre ci-dessus est le dico. défini comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tree = {}
    tree['Dummy'] = {}
    tree['Dummy'] ['test'] = {'__init__.py': None, 'x.py': None, 'y.py': None}
    tree['Dummy'] ['zeTest.py'] = None
    Toute info. est la bienvenue.

  2. #2
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Je comprends pas trop, quelle est la question ?

  3. #3
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    En fait, je veux représenter des arbres qui seront par exemple associés à l'arborescence d'un dossier. Je veux que la représentation soit faite qu'avec des caractères ASCII.

    En espérant avoir été un peu plus clair.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Parcourir l'arbre, on sait faire sans problème, après il te suffit de gérer une pile contenant le nombre de caractères d'indentation et d'afficher ça, à mon avis c'est pas bien compliqué, je te laisse chercher
    A mon avis le plus simple serait de gérer une "matrice", liste de listes qui contiendrait la sortie ligne par ligne et caractère par caractère, histoire de pouvoir modifier les lignes quand il faut rajouter un "frère" (ça ajoute un | par ligne pour faire le lien)
    Ensuite il ne reste plus qu'à tout fusionner.

  5. #5
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par oiffrig Voir le message
    ... d'afficher ça, à mon avis c'est pas bien compliqué, je te laisse chercher
    Je suis d'accord avec toi c'est bien pour cela que j'ai écrit :
    Citation Envoyé par oiffrig Voir le message
    ...je voulais savoir si quelqu'un avait déjà bidouillé...
    Je vais essayer de trouver 30 min d'abscence de flemme pour faire cela et je mettrais une solution ici.

  6. #6
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Et voilà ; c'est encore à paufinner mais bon, au moins tu pourras plus flemmarder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    >>> class Tree(object):
    	__slots__=('tree','files','folders')
    	def __init__(self):
    		self.tree={}
    		self.folders=[]
    		self.files=[]
    	def addFolder(self,name):
    		self.tree[name]=Tree()
    		bisect.insort(self.folders,name)
    	def addFile(self,name):
    		self.tree[name]=None
    		bisect.insort(self.files,name)
    	def addFolders(self,itr):
    		for x in itr:
    			self.addFolder(x)
    	def addFiles(self,itr):
    		for x in itr:
    			self.addFiles(x)
    	def __getitem__(self,key):
    		return self.tree[key]
    	def __setitem__(self,key,val):
    		self.tree[key]=val
    	def text(self):
    		for fold in self.folders:
    			yield '+--#[ %s ]'%fold
    			line_next='|  '
    			for lns in self.tree[fold].text():
    				yield line_next+lns
    			yield '|'
    		for fil in self.files:
    			yield '+- %s'%fil
     
    >>> def mapFolder(tree, dirname):
            '''sert scanner un dossier et ses sous-dossiers et reconstituer leur arbo dans le Tree object passé en param'''
    	for fnm in os.listdir(dirname):
    		if os.path.isdir(dirname+'/'+fnm):
    			tree.addFolder(fnm)
    			mapFolder(tree[fnm],dirname+'/'+fnm)
    		else:
    			tree.addFile(fnm)
    Et un exemple d'utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    >>> a=Tree()
    >>> mapFolder(a,'/home/ntox/Public')
    >>> print '\n'.join(a.text())
    +--#[ bsddb ]
    |  +- test.py
    |
    +--#[ testinit ]
    |  +- __init__.py
    |  +- __init__.pyc
    |  +- x.py
    |  +- x.pyc
    |  +- y.py
    |  +- y.pyc
    |
    +- Angel [5x05] - Life of the Party.srt
    +- Angel [5x05] - Life of the Party_NEW.srt
    +- Angel [5x06] - The Cautionary Tale of Numero Cinco.srt
    +- Angel [5x06] - The Cautionary Tale of Numero Cinco_NEW.srt
    +- Angel [5x07] - Lineage.srt
    +- Anglel 5x07 cuts
    +- arb.txt
    +- correctsrt.py
    +- test.py
    Attention tout de même à la profondeur des sous-dossiers ! Sinon la console se retrouvera avec des ligne excedent son nombre caractère par ligne, et effectuera des vilain retrours qui casseront la zolie mise en forme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. représentation d'un arbre lexicographique dans une console
    Par kahrah dans le forum Général Python
    Réponses: 2
    Dernier message: 05/12/2013, 23h54
  2. Réponses: 15
    Dernier message: 08/08/2012, 17h35
  3. affichage d'un Arbre B dans une console
    Par gastoncs dans le forum Langage
    Réponses: 4
    Dernier message: 09/06/2011, 11h24
  4. Accents dans une console windows
    Par JolyLoic dans le forum Windows
    Réponses: 8
    Dernier message: 20/10/2004, 00h57
  5. [VB.NET] Tabulation dans une console
    Par jacma dans le forum Windows Forms
    Réponses: 5
    Dernier message: 30/09/2004, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo