Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercice][Facile]Parcours de répertoires

    8 août 2010 à 6:10:48

    Bonjour à tous,

    Je propose un petit exercice facile, histoire de faire passer le temps. Le but est de créer un petit script, qui prend en entrée le chemin d'un répertoire, et qui affiche récursivement tous les fichiers et sous-répertoires, sous forme "d'arbre". Voici un exemple de ce que cela pourrait donner (en vrai, le nom des dossiers est écrit en rouge):

    gwb@macgwb ~/Hacks/Python/WalkDir % python test.py ../RESEARCH 
    +../RESEARCH(../RESEARCH)
    +----.grncl.py.stable
    +----grncl.py
    +----grncl.py~
    +----DB(../RESEARCH/DB)
    +--------db.s
    +----Graphs(../RESEARCH/Graphs)
    +--------.DS_Store
    +--------Basic.jpg
    +--------pts_Basic.jpg
    +----Lab(../RESEARCH/Lab)
    +--------grntopts.py
    +--------grntopts.py~
    +----Modules(../RESEARCH/Modules)
    +--------__init__.py
    +--------__init__.pyc
    +--------Extra_PTS(../RESEARCH/Modules/Extra_PTS)
    +------------__init__.py
    +------------__init__.pyc
    +------------constraint.py
    +------------constraint.pyc
    +------------Model.py
    +------------Model.pyc
    +------------PTS.py
    +------------PTS.pyc
    +--------Grn(../RESEARCH/Modules/Grn)
    +------------#test.py#
    +------------.gtopts.py.old
    +------------__init__.py
    +------------__init__.pyc
    +------------gtopts.py
    +------------gtopts.pyc
    +------------gtopts.py~
    +--------Utilities(../RESEARCH/Modules/Utilities)
    +------------__init__.py
    +------------__init__.pyc
    +------------controls.py
    +------------controls.pyc
    +------------controls.py~
    +------------db-manage.py~
    +------------dbmanage.py
    +------------dbmanage.pyc


    C'est pas très conmpliqué à faire, mais ça permet d'utiliser un peu le module OS, et d'apprendre à afficher des trucs en couleur dans la console. Voici le code:

    import os                                                                                                                                                                            
    import sys                                                                                                                                                                           
                                                                                                                                                                                         
    DIR_COL = '\033[93m'                                                                                                                                                                 
    ENDCOL = '\033[0m'                                                                                                                                                                   
    SYM = '----'                                                                                                                                                                         
                                                                                                                                                                                         
    def print_tree(root):                                                                                                                                                                
        depth_ini = len(root.split('/'))                                                                                                                                                 
        for pathname, dirnames, filenames in os.walk(root):                                                                                                                              
            offset = len(pathname.split('/')) - depth_ini                                                                                                                                
            if offset == 0:                                                                                                                                                              
                print '+' + DIR_COL + pathname + ENDCOL + '(' + pathname + ')'                                                                                                           
            else:                                                                                                                                                                        
                print '+' + offset*SYM + DIR_COL + pathname.split('/')[-1] + ENDCOL + '(' + pathname + ')'                                                                               
            for filename in filenames:                                                                                                                                                   
                print '+' + offset*SYM + SYM + filename                                                                                                                                  
                                                                                                                                                                                         
    def main():                                                                                                                                                                          
        if len(sys.argv) > 1 :                                                                                                                                                           
            print_tree(sys.argv[1])                                                                                                                                                      
        else:                                                                                                                                                                            
            print_tree('.')                                                                                                                                                              
                                                                    
                                                                                                                                                                                         
    if __name__ == '__main__':                                                                                                                                                           
        main()
    



    Il y a bien sur plein de moyens d'améliorer le script, et en particulier de le rendre plus utile. On peut par exemple ajouter la taille des fichiers et des répertoires. On peut également ajouter un système de "parsing d'options", qui permettrait d'utiliser le script comme on utilise "ls", avec plusieurs options. Si certains sont intéressé, je peux modifier mon script dans ce sens.
    • Partager sur Facebook
    • Partager sur Twitter
      8 août 2010 à 11:36:34

      Pour manipuler des chemins de fichiers j'utilise en général ce module :

      http://pypi.python.org/pypi/path.py

      Très pratique (mieux pensé que os.path).
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        8 août 2010 à 13:18:55

        Voila mon code

        from os import walk
        from os.path import join
        
        def search_path(nom_rep):
            for root, dirs, files in walk("C:\\"):
                for name in root.split("\\"):
                    if name.startswith(nom_rep) and name.endswith(nom_rep):
                        print root
                        for f in files:
                            print "+......."+f
        
        search_path("temp")
        


        Résultat :

        C:\Python26\build\bdist.win32\winexe\temp
        +.......bz2.py
        +.......select.py
        +.......unicodedata.py
        +.......win32api.py
        +......._ctypes.py
        C:\Python26\Lib\site-packages\isapi\test\build\bdist.win32\winexe\temp
        +.......datetime.py
        +.......datetime.pyc
        +.......datetime.pyo
        +.......unicodedata.py
        +.......unicodedata.pyc
        +.......unicodedata.pyo
        +.......win32api.py
        +.......win32api.pyc
        +.......win32api.pyo
        +.......win32event.py
        +.......win32event.pyc
        +.......win32event.pyo
        +.......win32file.py
        +.......win32file.pyc
        +.......win32file.pyo
        +.......win32security.py
        +.......win32security.pyc
        +.......win32security.pyo
        +.......win32trace.py
        +.......win32trace.pyc
        +.......win32trace.pyo
        +.......win32ui.py
        +.......win32ui.pyc
        +.......win32ui.pyo
        +.......zlib.py
        +.......zlib.pyc
        +.......zlib.pyo
        +......._socket.py
        +......._socket.pyc
        +......._socket.pyo
        +......._sre.py
        +......._sre.pyc
        +......._sre.pyo
        +......._ssl.py
        +......._ssl.pyc
        +......._ssl.pyo
        +......._win32sysloader.py
        +......._win32sysloader.pyc
        +......._win32sysloader.pyo
        +......._winreg.py
        +......._winreg.pyc
        +......._winreg.pyo
        C:\temp
        +.......twain32.ini
        C:\Users\Fred\AppData\Local\Temp\pyl8C03.tmp\temp
        C:\Windows\assembly\temp


        Modification :

        from os import walk, system
        
        def search_path(nom_rep):
            for root, dirs, files in walk("C:\\"):
                splitter=root.split("\\")
                if splitter[-1:][0].startswith(nom_rep) and splitter[-1:][0].endswith(nom_rep):
                    print root
                    for f in files: print "+......."+f
        
        rep=raw_input("Entrer le nom du repertoire a chercher :")
        search_path(rep)
        system('pause')
        


        Résultat :

        C:\Python26\build\bdist.win32\winexe\temp
        +.......bz2.py
        +.......select.py
        +.......unicodedata.py
        +.......win32api.py
        +......._ctypes.py
        C:\Python26\Lib\site-packages\isapi\test\build\bdist.win32\winexe\temp
        +.......datetime.py
        +.......datetime.pyc
        +.......datetime.pyo
        +.......unicodedata.py
        +.......unicodedata.pyc
        +.......unicodedata.pyo
        +.......win32api.py
        +.......win32api.pyc
        +.......win32api.pyo
        +.......win32event.py
        +.......win32event.pyc
        +.......win32event.pyo
        +.......win32file.py
        +.......win32file.pyc
        +.......win32file.pyo
        +.......win32security.py
        +.......win32security.pyc
        +.......win32security.pyo
        +.......win32trace.py
        +.......win32trace.pyc
        +.......win32trace.pyo
        +.......win32ui.py
        +.......win32ui.pyc
        +.......win32ui.pyo
        +.......zlib.py
        +.......zlib.pyc
        +.......zlib.pyo
        +......._socket.py
        +......._socket.pyc
        +......._socket.pyo
        +......._sre.py
        +......._sre.pyc
        +......._sre.pyo
        +......._ssl.py
        +......._ssl.pyc
        +......._ssl.pyo
        +......._win32sysloader.py
        +......._win32sysloader.pyc
        +......._win32sysloader.pyo
        +......._winreg.py
        +......._winreg.pyc
        +......._winreg.pyo
        C:\temp
        +.......twain32.ini
        C:\Users\Fred\AppData\Local\Temp\pyl8C03.tmp\temp
        C:\Windows\assembly\temp


        Code permettant de rechercher le nom d'un répertoire et les fichiers avec une extension définie.

        from os import walk, system
        
        def search_path(nom_rep, extension):
            for root, dirs, files in walk("C:\\"):
                splitter=root.split("\\")
                if splitter[-1:][0].startswith(nom_rep) and splitter[-1:][0].endswith(nom_rep):
                    print root
                    for f in files:
                        if f.endswith("."+extension): print "+......."+f
        
        rep=raw_input("Entrer le nom du repertoire a chercher :")
        ext=raw_input("Entrer l\'extension du fichier recherchee :")
        search_path(rep, ext)
        system('pause')
        


        Entrer le nom du repertoire a chercher :Python26
        Entrer l'extension du fichier recherchee :py
        C:\Python26
        +.......dev.py
        +.......loto.py
        +.......proc.py
        +.......reparation_xp.py
        +.......setup.py
        +.......test.py
        • Partager sur Facebook
        • Partager sur Twitter
          8 août 2010 à 14:56:16

          #!/usr/bin/python3
          #! -*- coding:utf-8 -*-
          import os
          
          def path_tree(path,level=0):
              #level correspond au niveau de l'arborescence du répertoire :
              #c'est utile pour mettre les ---- correctement.
              dirlist = ['{0}{1} ({2})'.format('+'+'-'*level*4, os.path.split(path)[1], \
                  path)]
              #dirlist sera la liste des répertoires ; on ajoute de suite
              #le répertoire courant à la liste des éléments.
          
              for i in [os.path.join(path,j) for j in sorted(os.listdir(path))]:
              #sorted sert à trier la liste des éléments du répertoire, c'est quand
              #même plus mieux à regarder à la sortie, non ?
              #os.listdir(path) retourne une liste des éléments du répertoire, et non
              #des chemins vers ces éléments. Une list comprehension bien employée ici
              #est utilisée pour fusionner le chemin du répertoire à celui des éléments,
              #avec os.path.join(path, élém) pour que ce soit propre.
          
                  if os.path.isdir(i):
                      dirlist.extend(path_tree(i,level+1))
                      #ici, on peut noter que la fonction est récursive : si c'est un
                      #répertoire, on appelle path_tree avec le nouveau répertoire, et on
                      #ajoute son contenu à dirlist. Note importante :
                      #NE PAS UTILISER DE LISTE GLOBALE QUAND ON UTILISE UNE
                      #FONCTION RECURSIVE, sous peine de saturation de mémoire en cas de
                      #petite erreur. C'est pourquoi je recrée une variable locale dirlist
                      #à chaque fois, et que je retourne dirlist au lieu de l'ajouter à
                      #une liste globale.
          
                  elif os.path.isfile(i):
                      dirlist.append('{0}{1}'.format(\
                          '+'+'-'*(level+1)*4,
                          os.path.split(i)[1]))
          
              return dirlist
          
          print('\n'.join(path_tree('D:\\music')))
          


          Mon code a pour but de montrer deux ou trois choses intéressantes pour les débutants :
          - Tout d'abord, l'utilisation des fonctions builtin de python, telles que os.listdir, souvent peu connue et délaissée au profit d'autres fonctions du module os.path... Pourtant, c'est plus facile ainsi de traiter séparément les fichiers, les répertoires, voire les liens symboliques sous linux...
          - Ensuite, j'utilise une fonction récursive, ce qui peut être intéressant ; de plus, on en voit vite l'intérêt pour ce cas ;
          - Enfin, le code me semble plutôt simple à comprendre, et je l'ai bien commenté, sans imbriquer de partout, et avec une indentation correcte.

          La sortie de mon code :
          +music (D:\music)
          +----Bob Marley & The Wailers - Legend (D:\music\Bob Marley & The Wailers - Legend)
          +--------01 - Is This Love.flac
          +--------02 - No Woman No Cry (live).flac
          +--------03 - Could You Be Loved.flac
          +--------04 - Three Little Birds.flac
          +--------05 - Buffalo Soldier.flac
          +--------06 - Get Up Stand Up.flac
          +--------07 - Stir It Up.flac
          +--------08 - Easy Skanking.flac
          +--------09 - One Love _ People Get Ready.flac
          +--------10 - I Shot the Sheriff.flac
          +--------11 - Waiting in Vain.flac
          +--------12 - Redemption Song.flac
          +--------13 - Satisfy My Soul.flac
          +--------14 - Exodus.flac
          +--------15 - Jamming.flac
          +--------16 - Punky Reggae Party.flac
          +----Compil' Pirate (D:\music\Compil' Pirate)
          +--------01 - Drunk Souls - Pain of Life.flac
          +--------02 - Faut qu'ça guinche - Viens guincher.flac
          +--------03 - Allison Crowe - Skeletons and spirits.flac
          +--------04 - Moondogs Blues Party - Walking night in Mississippi.flac
          +--------05 - David TMX - 4 degrés 7.flac
          +--------06 - Xera - Valsiau de San Andrés.flac
          +--------07 - BigBoNoBo - Youri Gagarine.flac
          +--------08 - Jérémie Petit - La marche nuptiale.flac
          +--------09 - Songo 21 - Me da risa.flac
          +--------10 - DoubleMinds - Xarj Phil First.flac
          +--------11 - Dan Masquelier - Wake Up.flac
          +--------12 - Hanky Panky - Aller Retour.flac
          +--------13 - Circus Marcus - Les accouplements répétitifs.flac
          +--------14 - Echo lali - La fugue des animaux.flac
          +----Consortium - 2005 - The Urban Tale - OST1 (D:\music\Consortium - 2005 - The Urban Tale - OST1)
          +--------01 - court metrage no1, the urban tale.flac
          +--------02 - artificial orchestral tale, marcel de la jartele, the urban tale.flac
          +--------03 - tribal city mix, realaze, the urban tale.flac
          +--------04 - final, phoebus.flac
          +--------05 - restructured, no sushi, the urban tale.flac
          +--------06 - libre com l air, delgarma.flac
          +--------07 - la memoire des elfes nains, lacrymosa industry, the urban tale.flac
          +--------08 - elctron libre, silence.flac
          +--------09 - nos ailes, lonah, the urban tale.flac
          +----Constance Verluca - Adieu Pony (D:\music\Constance Verluca - Adieu Pony)
          +--------01 - C'est faux.flac
          +--------02 - Les trois copains.flac
          +--------03 - Tu es laide.flac
          +--------04 - Je simule.flac
          +--------05 - Majeure.flac
          +--------06 - Le clown et le soldat.flac
          +--------07 - Ding dang dong.flac
          +--------08 - C'est le moment de mourir.flac
          +--------09 - Judas.flac
          +--------10 - Donne-moi ta vie.flac
          +--------11 - Matt Dillon.flac
          +--------12 - Blues.flac
          +----David TMX - A l'oree d'un siecle en bois (D:\music\David TMX - A l'oree d'un siecle en bois)
          +--------01 - A l’orée d’un siècle en bois.mp3
          +--------02 - Lesbos.mp3
          +--------03 - Rapports tendus.mp3
          +--------04 - La kasket aux 4 visieres.mp3
          +--------05 - Brojzdi abroujzdaniev vizjda.mp3
          +--------06 - A mort la mort.mp3
          +--------07 - Clémentine on ne chante pas dans la nuit.mp3
          +--------08 - H.mp3
          +--------09 - Ma crasse.mp3
          +--------10 - Les conquérants de l’univers.mp3
          +--------11 - L’homme fourmi atomique.mp3
          +--------12 - Un bain de cassoulet.mp3
          +--------13 - L’homme s’enterre.mp3
          +--------14 - Va savoir.mp3
          +--------15 - Qui a bu boira.mp3
          +--------16 - Tabass.mp3
          +--------17 - Bébé phoques fuck BB.mp3
          +--------18 - Knoklezout au taquet !.mp3
          +--------19 - Imbroglio.mp3
          +--------20 - La mouche.mp3
          +--------21 - Border line.mp3
          +--------22 - Je m’appelle crogrignnnoncr.mp3
          +----David TMX - Avant j'etais trappeur (D:\music\David TMX - Avant j'etais trappeur)
          +--------01 - Avant j'étais trappeur.mp3
          +--------02 - La bête est là.mp3
          +--------03 - L'aéroplane blindé.mp3
          +--------04 - Cumshot.mp3
          +--------05 - Mé j'suis po un bréton !.mp3
          +--------06 - Petit escargot par le 507 rgt de para de Pau.mp3
          +--------07 - Univers lisse.mp3
          +--------08 - Le criterium à cran.mp3
          +--------09 - Nicht rauchen.mp3
          +--------10 - Le génie et le trappeur.mp3
          +--------11 - I would like.mp3
          +--------12 - Conférie médiocritas.mp3
          +--------13 - Les hardcoristes.mp3
          +--------14 - TMX, Paris.mp3
          +--------15 - Alava comme j'te pousse.mp3
          +--------16 - Les maudits mâles.mp3
          +--------17 - Le ridicule ne tue pas.mp3
          +--------18 - 4 degrés 7.mp3
          +--------19 - Bourré de longue date.mp3
          +--------20 - L'envie.mp3
          +--------21 - L'appel de la gazelle.mp3
          +--------22 - Pour un monde meilleur.mp3
          +--------23 - John Kafé disjoncte.mp3
          +--------24 - L'aube lunaire.mp3
          +----David TMX - K.C.D et plus si affinites (D:\music\David TMX - K.C.D et plus si affinites)
          +--------01 - Processus de P.mp3
          +--------02 - Primal Therapy.mp3
          +--------03 - L'aire de la turlutte.mp3
          +--------04 - R'N'bite.mp3
          +--------05 - Le chanteur d'apéro.mp3
          +--------06 - Tant que la mouche me pique.mp3
          +--------07 - Dr Lali VS Mr Hardcore.mp3
          +--------08 - La cachette idéale.mp3
          +--------09 - Mes collègues.mp3
          +--------10 - La couronne d'épine.mp3
          +--------11 - Les gens DG.mp3
          +--------12 - Profession sécateur.mp3
          +--------13 - TV Kasdal.mp3
          +--------14 - L'enfant roi, l'enfant proie.mp3
          +--------15 - la retraite du 507ème.mp3
          +--------16 - Voir montargis et mourir.mp3
          +--------17 - Sous le pont du bois de chêne.mp3
          +--------18 - Tu vis tu meurs.mp3
          +--------19 - La chute.mp3
          +--------20 - Plus jamais en Bretagne.mp3
          +--------21 - Tape des nains.mp3
          +--------22 - Kaskakorn.mp3
          +----David TMX - Les Mondes Paralleles (D:\music\David TMX - Les Mondes Paralleles)
          +--------01 - Rotir en enfer.mp3
          +--------02 - I'm leaving.mp3
          +--------03 - Antoshka.mp3
          +--------04 - Jean Louis en Italie.mp3
          +--------05 - Je vomis comme je chante.mp3
          +--------06 - De mort naturelle.mp3
          +--------07 - Arbeit Nach Frei.mp3
          +--------08 - Mr Hardcore.mp3
          +--------09 - La fugue des animaux.mp3
          +--------10 - Fecalum.mp3
          +--------11 - Hommage à ma bite.mp3
          +--------12 - TMX.mp3
          +--------13 - Quand on a pas ce qu'on aime.mp3
          +--------14 - Kasskouille.mp3
          +--------15 - Apologize.mp3
          +--------16 - Mon p'tit bordel.mp3
          +--------17 - J'men fous pas mal.mp3
          +--------18 - Phobie canine.mp3
          +--------19 - Les enfants de la guerre.mp3
          +--------20 - C'est l'homme.mp3
          +--------21 - Je suis très en colère.mp3
          +----David TMX - Pouce ! (D:\music\David TMX - Pouce !)
          +--------01 - Intro chiante.mp3
          +--------02 - Aide toi....mp3
          +--------03 - Une charogne.mp3
          +--------04 - Aimons nous....mp3
          +--------05 - Jouvencelle.mp3
          +--------06 - L'homme pouce.mp3
          +--------07 - Y'a un truc.mp3
          +--------08 - LVO Hardcore.mp3
          +--------09 - Que du naturel.mp3
          +--------10 - Voici le gala.mp3
          +--------11 - Croquemitaine.mp3
          +--------12 - Histoire de grouin.mp3
          +--------13 - JLP vs momomatic.mp3
          +--------14 - Légionnaire zoophile.mp3
          +--------15 - La frontière.mp3
          +--------16 - Headbanger.mp3
          +--------17 - Noxious.mp3
          +--------18 - Ralalalatouf.mp3
          +----David TMX - TMX Band (D:\music\David TMX - TMX Band)
          +--------01 - 4 degrés 7.mp3
          +--------02 - Cumshot.mp3
          +--------03 - Philomène.mp3
          +--------04 - Le hamster VS mémé (acoustique).mp3
          +--------05 - La kasket au 4 visières.mp3
          +--------06 - Le légionnaire zoophile.mp3
          +--------07 - Alava comme j'te pousse.mp3
          +----David TMX - argh ! (D:\music\David TMX - argh !)
          +--------01 - Shemale todo brazil.mp3
          +--------02 - 10 000 bornes.mp3
          +--------03 - Vas-y Jean-Louis !.mp3
          +--------04 - Ma poupée.mp3
          +--------05 - Un cri.mp3
          +--------06 - La chanson la plus sale du monde.mp3
          +--------07 - Le menbro du manu D.mp3
          +--------08 - Gratamor ''les fleurs du mal''.mp3
          +--------09 - La bouche en mille feuilles.mp3
          +--------10 - Slipkrot.mp3
          +--------11 - Complainte à la paix.mp3
          +--------12 - Le père noël comme une queue de pelle.mp3
          +--------13 - Mais où est l'agilla.mp3
          +--------14 - Modern punk.mp3
          +--------15 - Mes potes.mp3
          +--------16 - Get some fucking fresh bazelliou.mp3
          +--------17 - Les voyages de Mr Pattel.mp3
          +--------18 - Pas très content.mp3
          +--------19 - Popunk.mp3
          +--------20 - Un poil trp'tit.mp3
          +--------21 - No violence.mp3
          +--------22 - Cornes de bouc et couilles de loup.mp3
          +--------23 - Je t'en prie Jean-Louis.mp3
          +--------24 - Je n'sais dire que du mal des autres.mp3
          +----David TMX - c'est du lourd (D:\music\David TMX - c'est du lourd)
          +--------01 - intro.mp3
          +--------02 - le curé qui vouliat baiser.mp3
          +--------03 - ma poupée ta gueule.mp3
          +--------04 - le pipeur de mots.mp3
          +--------05 - ça va mieux.mp3
          +--------06 - hardcore-softcore.mp3
          +--------07 - putain de samedi.mp3
          +--------08 - comme une noisette.mp3
          +--------09 - mtv-mcm.mp3
          +--------10 - ami jeune !.mp3
          +--------11 - la barre.mp3
          +--------12 - ma voix.mp3
          +--------13 - philomène.mp3
          +--------14 - L.B.A.P. par le 507 rgt de para de Pau.mp3
          +--------15 - hamster vs mémé.mp3
          +--------16 - allez vous faire foot.mp3
          +--------17 - orchite et vulvite.mp3
          +--------18 - l'homme en carton.mp3
          +--------19 - tendre petite soeur.mp3
          +--------20 - le truc qui poutre.mp3
          +--------21 - l'odeur de malheur.mp3
          +--------22 - ma petite fille croquante.mp3
          +----David TMX - fournee d'automne (D:\music\David TMX - fournee d'automne)
          +--------01 - qui pleure .mp3
          +--------02 - les femmes à 4 fesses.mp3
          +--------03 - mes voisins.mp3
          +--------04 - la bolée de bedan.mp3
          +--------05 - démago go !.mp3
          +--------06 - la complainte des 7 nains.mp3
          +--------07 - en 4x4 en ville.mp3
          +--------08 - hélicoanu 2.mp3
          +--------09 - ils parlent du loup.mp3
          +--------10 - je deviens bowbee.mp3
          +--------11 - l'amour sans capote.mp3
          +--------12 - y'en a eu.mp3
          +--------13 - le dauphin.mp3
          +----David TMX - fournee de printemps (D:\music\David TMX - fournee de printemps)
          +--------01 - intro printaniere.mp3
          +--------02 - trappeur jean pierre.mp3
          +--------03 - the glory hole.mp3
          +--------04 - plastic bertrand est il mort.mp3
          +--------05 - les passions de Marcel.mp3
          +--------06 - le jouet.mp3
          +--------07 - le cocu.mp3
          +--------08 - ta mère n'est pas ma soeur.mp3
          +--------09 - commandant jacques Lemoine.mp3
          +--------10 - la bourée du trappeur.mp3
          +--------11 - mon ex belle mère.mp3
          +--------12 - fortunatly jesus is not a nigger.mp3
          +--------13 - david pujilas.mp3
          +--------14 - fils de 1000 serpents.mp3
          +--------15 - punition anale.mp3
          +--------16 - le testament.mp3
          +----David TMX - quadragenaire de quoi j'air l'air (D:\music\David TMX - quadragenaire de quoi j'air l'air)
          +--------01 - comme un mur.mp3
          +--------02 - le temps de la reflexion.mp3
          +--------03 - l'heure des mamans.mp3
          +--------04 - moi moi moi.mp3
          +--------05 - a gaza.mp3
          +--------06 - des veaux devots.mp3
          +--------07 - vivre libre.mp3
          +--------08 - listen nazi.mp3
          +--------09 - rallume la chaudiere.mp3
          +--------10 - le monstre en coeur.mp3
          +--------11 - punk.mp3
          +--------12 - fais pas ci.mp3
          +--------13 - featstouffi.mp3
          +--------14 - javais en memoire.mp3
          +--------15 - l'ere de jlp.mp3
          +--------16 - la destruction.mp3
          +--------17 - quadragenaire de quoi j ai lair.mp3
          +--------18 - ballade du dildo.mp3
          +--------19 - headbanger.mp3
          +----Drunksouls - On verra plus tard (D:\music\Drunksouls - On verra plus tard)
          +--------01 - Pain of life.flac
          +--------02 - Give me a sign.flac
          +--------03 - Dear lady.flac
          +--------04 - No more fighting.flac
          +--------05 - There is a place.flac
          +--------06 - Comme Louise et Thelma.flac
          +--------07 - Promenons-nous dans les bois.flac
          +--------08 - Barfly.flac
          +--------09 - U.N.flac
          +--------10 - Dernière cigarette.flac
          +--------11 - Obao.flac
          +--------12 - Cuba.flac
          +--------13 - I'll be there.flac
          +----Massive Attack - Heligoland (D:\music\Massive Attack - Heligoland)
          +--------01 - Pray for Rain.flac
          +--------02 - Babel.flac
          +--------03 - Splitting the Atom.flac
          +--------04 - Girl I Love You.flac
          +--------05 - Psyche.flac
          +--------06 - Flat of the Blade.flac
          +--------07 - Paradise Circus.flac
          +--------08 - Rush Minute.flac
          +--------09 - Saturday Come Slow.flac
          +--------10 - Atlas Air.flac
          +----Mozart l'Opéra Rock - CD1 (D:\music\Mozart l'Opéra Rock - CD1)
          +--------01 - l'Ouverture.flac
          +--------02 - Penser l'impossible.flac
          +--------03 - La chanson de l'aubergiste.flac
          +--------04 - Le trublion.flac
          +--------05 - Bim bam boum.flac
          +--------06 - Ah vous dirais-je maman.flac
          +--------07 - Six pieds sous terre.flac
          +--------08 - J'accuse mon père.flac
          +--------09 - Tatoue-moi.flac
          +--------10 - La procession.flac
          +--------11 - La mascarade.flac
          +--------12 - Je dors sur des roses.flac
          +----Mozart l'Opéra Rock - CD2 (D:\music\Mozart l'Opéra Rock - CD2)
          +--------01 - Comedie tragedie.flac
          +--------02 - Place je passe.flac
          +--------03 - Si je defaille.flac
          +--------04 - Le bien qui fait mal.flac
          +--------05 - Les solos sous les draps.flac
          +--------06 - L'assasymphonie.flac
          +--------07 - L'operap.flac
          +--------08 - Dors mon ange.flac
          +--------09 - Victime de ma victoire.flac
          +--------10 - Vivre a en crever.flac
          +--------11 - Debout les fous.flac
          +--------12 - Je danse avec les Dieux.flac
          +--------13 - Quand le rideau tombe.flac
          +--------14 - Bonheur de malheur.flac
          +--------15 - Le carnivore.flac
          +----Renaud - Marche à l'ombre (D:\music\Renaud - Marche à l'ombre)
          +--------Baston.mp3
          +--------Dans mon HLM.mp3
          +--------It is not because you are.mp3
          +--------L'auto-stoppeuse.mp3
          +--------La teigne.mp3
          +--------Les aventures de Gérard Lambert.mp3
          +--------Marche à l'ombre.mp3
          +--------Mimi l'ennui.mp3
          +--------Où c'est que j'ai mis mon flingue.mp3
          +--------Pourquoi d'abord.mp3
          +----Sean Fournier - Oh My (D:\music\Sean Fournier - Oh My)
          +--------01 - Sean Fournier - Broken Stereo (Acoustic Version).mp3
          +--------02 - Sean Fournier - Goodbye (Piano Version).mp3
          +--------03 - Sean Fournier - Holding The Hand Of The Hurricane.mp3
          +--------04 - Sean Fournier - Another Like You (Piano Version).mp3
          +--------05 - Sean Fournier - Put The World On Stop (Piano Version).mp3
          +--------06 - Sean Fournier - Falling For You (Piano Version).mp3
          +----SlogaN - Demo 1 (D:\music\SlogaN - Demo 1)
          +--------01 - SlogaN - dripping.mp3
          +--------02 - SlogaN - selfish man.mp3
          +--------03 - SlogaN - strange row.mp3
          +--------04 - SlogaN - burry my friend.mp3
          +--------05 - SlogaN - 6am.mp3
          +----Tryad - Listen (D:\music\Tryad - Listen)
          +--------01 - Tryad - Struttin'.flac
          +--------02 - Tryad - Breathe.flac
          +--------03 - Tryad - Alone.flac
          +--------04 - Tryad - Listen.flac
          +--------05 - Tryad - You are god.flac
          +--------06 - Tryad - Lovely.flac
          +--------07 - Tryad - Beauty.flac
          +--------08 - Tryad - Empty.flac
          +--------09 - Tryad - Mesmerize.flac
          +--------10 - Tryad - All the same.flac
          +--------11 - Tryad - This.flac
          +--------12 - Tryad - Waltz into the moonlight.flac
          +--------13 - Tryad - Far and away.flac
          +----Tryad - Public Domain (D:\music\Tryad - Public Domain)
          +--------01 - Tryad - Intro (a.k.a., The Samplist).flac
          +--------02 - Tryad - The Final Rewind.flac
          +--------03 - Tryad - I See.flac
          +--------04 - Tryad - Our Lives Change.flac
          +--------05 - Tryad - Seduction.flac
          +--------06 - Tryad - Witness.flac
          +--------07 - Tryad - Beat Into Submission (Solo).flac
          +--------08 - Tryad - Bridge (a.k.a., Presidential Address).flac
          +--------09 - Tryad - Peace On Earth (Same Place).flac
          +--------10 - Tryad - My Piano Sings (Part 4) (with Joana Smith).flac
          +--------11 - Tryad - Dance of the Urbanite.flac
          +--------12 - Tryad - Star Guide.flac
          +--------13 - Tryad - Sampling Memory.flac
          +--------14 - Tryad - My Placid Island.flac
          +--------15 - Tryad - Arcadia.flac
          +--------16 - Tryad - The Rising.flac
          +--------17 - Tryad - Outro (a.k.a., Turntable Winding Down).flac
          +----divers (D:\music\divers)
          +--------01 - Holophonic - Matchbox.mp3
          +--------01 - Patrick Fiori, Garou, Daniel Lavoie - Belle.flac
          +--------02 - Holophonic - Virtual barbershop.mp3
          +--------04 - Michael Jackson - Thriller.flac
          +--------05 - Michael Jackson - Beat It.flac
          +--------06 - Michael Jackson - Billie Jean.flac
          +--------Basshunter - Now you're gone.mp3
          +--------Calogero - Danser encore.mp3
          +--------Calogero - Pomme C.mp3
          +--------Christophe Willem - Double Je.mp3
          +--------Christophe Willem - Jacques a dit [remix].mp3
          +--------Christophe Willem - Jacques a dit.mp3
          +--------Coldplay - Viva la vida.mp3
          +--------David Guetta - Baby when the lights.mp3
          +--------David Guetta - Tomorrow can wait.mp3
          +--------Enrique Iglesias - Tired of being sorry.mp3
          +--------Enrique Iglesias ft. Nâdiya - Tired of being sorry [fr].mp3
          +--------Fergie - Fergalicious [remix].mp3
          +--------Grégoire - Toi + moi.mp3
          +--------Helmut Fritz - Ca m'énerve.mp3
          +--------James Brown - I feel good.mp3
          +--------James Morisson ft. Nelly Furtado - Broken strings.mp3
          +--------Kamini - J'suis blanc !.mp3
          +--------Kamini - Marly Gomont.mp3
          +--------Kamini - Un p'tit coup de motherfuck.mp3
          +--------Magic System - Même pas fatigué.mp3
          +--------Magic System ft. Cheb Khaled - Zouglou dance.mp3
          +--------Nelly Furtado ft. Timbaland - Promiscuous [remix].mp3
          +--------Nelly Furtado ft. Timbaland - Promiscuous.mp3
          +--------One Republic - Apologize.mp3
          +--------Peps - Liberta.mp3
          +--------Queen - Bohemian rhapsody.mp3
          +--------Renan Luce - La lettre.mp3
          +--------Renaud - Triviale poursuite.mp3
          +--------Sheryfa Luna ft. Mathieu Edward - Comme avant.mp3
          +--------Sinik ft. James Blunt - Je réalise.mp3
          +--------Superbus - Addictions.mp3
          +--------Superbus - Butterfly.mp3
          +--------Superbus - Travel the world.mp3
          +--------Timbaland ft. Keri Hilson - The way I are.mp3
          +--------William Baldé - Un rayon de soleil.mp3
          +----electron7 - Millenium (D:\music\electron7 - Millenium)
          +--------01 - electron7 - My light.mp3
          +--------02 - electron7 - Computer world (Remix).mp3
          +--------03 - electron7 - I believe.mp3
          +--------04 - electron7 - Highway.mp3
          +--------05 - electron7 - Don't stop.mp3
          +----electron7 - The Secret Place (D:\music\electron7 - The Secret Place)
          +--------01 - electron7 - The entrance.mp3
          +--------02 - electron7 - Inside.mp3
          +--------03 - electron7 - Sharu (The king).mp3
          +--------04 - electron7 - Tree of life.mp3
          +--------05 - electron7 - In His presence.mp3
          +--------06 - electron7 - Between time and space.mp3
          +--------07 - electron7 - Like a child.mp3
          +--------08 - electron7 - Eden (part1 & part 2).mp3
          +----electron7 - The prophecy (D:\music\electron7 - The prophecy)
          +--------01 - Introduction.mp3
          +--------02 - Tuning into grace.mp3
          +--------03 - It's time.mp3
          +--------04 - Passing by.mp3
          +--------05 - The promise.mp3
          +--------06 - The kingdom.mp3
          +--------07 - A new nation.mp3
          +--------08 - Sons of zion.mp3
          +--------09 - The millennian man.mp3
          +--------10 - Clouds of angels.mp3
          +--------11 - Ruach elohim.mp3
          +----electron7 - Transformation (D:\music\electron7 - Transformation)
          +--------01 - electron7 - Transformation.mp3
          +--------02 - electron7 - Effata (Get open).mp3
          +--------03 - electron7 - Goodbye.mp3
          +--------04 - electron7 - Emotions.mp3
          +--------05 - electron7 - Ask Me.mp3
          +--------06 - electron7 - Twisted.mp3
          +--------07 - electron7 - Memories.mp3
          +--------08 - electron7 - Alpha and Omega.mp3
          +--------09 - electron7 - Friendschip forever.mp3
          +--------10 - electron7 - Brothers and sisters.mp3
          +----jimi (again) - Cravate Blues (D:\music\jimi (again) - Cravate Blues)
          +--------01 - L'isoloir.mp3
          +--------02 - Rochechouart.mp3
          +--------03 - Le Crayon.mp3
          +--------04 - Martine.mp3
          +--------05 - Le Square.mp3
          +--------06 - La Marche nuptiale.mp3
          +--------07 - J'avais pas prévu.mp3
          +----pornophonique - 8-bit lagerfeuer (D:\music\pornophonique - 8-bit lagerfeuer)
          +--------01 - pornophonique - sad robot.mp3
          +--------02 - pornophonique - take me to the bonuslevel because i need an extralife.mp3
          +--------03 - pornophonique - lemmings in love.mp3
          +--------04 - pornophonique - space invaders.mp3
          +--------05 - pornophonique - i want to be a machine.mp3
          +--------06 - pornophonique - 1-2 player game.mp3
          +--------07 - pornophonique - game over.mp3
          +--------08 - pornophonique - rock'n'roll hall of fame.mp3
          +----pornophonique - the procacci remixes (D:\music\pornophonique - the procacci remixes)
          +--------01 - pornophonique - lemmings in love (procacci remix).mp3
          +--------02 - pornophonique - space invaders (procacci remix).mp3
          +--------03 - pornophonique - sad robot (procacci's funky android deconstruction remix).mp3
          +--------04 - pornophonique - i want to be a machine (procacci remix).mp3
          • Partager sur Facebook
          • Partager sur Twitter
            8 août 2010 à 15:55:34

            @Ordiclic: J'aime bien ton implémentation. Je reconnais ne pas être très versé dans l'utilisation du module OS; je note que son utilisation est beaucoup plus intuitive et élégante que celle d'os.path, d'autant qu'elle permet une implémentation récursive. J'aurai appris quelque chose d'intéressant!

            @fred1599: Bonne idée d'amélioration, je n'y avais pas pensé, mais c'est tout à fait dans l'esprit de l'exercice.
            • Partager sur Facebook
            • Partager sur Twitter
              8 août 2010 à 16:29:46

              Une petite version utilisant l'instruction yield , ça m'a fait découvrir le module os un peu et os.path :)
              Testé uniquement sous Windows (je peux pas aller sous Linux pour le moment), j'aimerais un retour sous Linux, merci :)
              def _path_tree(path):
              	yield '{} ({})'.format(os.path.basename(path),os.path.realpath(path))
              	for name in os.listdir(os.path.realpath(path)):
              		if os.path.isdir(os.path.join(path,name)):
              			for b in _path_tree(os.path.join(path,name)):
              				yield '----' + b
              		elif os.path.isfile(os.path.join(path,name)):
              			yield '----' + name
              
              def path_tree(path):
              	for tmp in _path_tree(path):
              		print('+' + tmp)
              
              path_tree('J:\\Musique\\System of a Down')
              

              En sortie :
              +System of a Down (J:\Musique\System of a Down)
              +----Hypnotize (J:\Musique\System of a Down\Hypnotize)
              +--------01 - System of a Down - Attack.mp3
              +--------02 - System of a Down - Dreaming.mp3
              +--------03 - System of a Down - Kill Rock 'N Roll.mp3
              +--------04 - System of a Down - Hypnotize.mp3
              +--------05 - System of a Down - Stealing Society.mp3
              +--------06 - System of a Down - Tentative.mp3
              +--------07 - System of a Down - U-Fig.mp3
              +--------08 - System of a Down - Holy Mountains.mp3
              +--------09 - System of a Down - Vicinity of Obscenity.mp3
              +--------10 - System of a Down - She's Like Heroin.mp3
              +--------11 - System of a Down - Lonely day.mp3
              +--------12 - System of a Down - Soldier Side.mp3
              +--------AlbumArtSmall.jpg
              +--------AlbumArt_{8434C6BC-AD8C-478E-8C5A-F34669574864}_Large.jpg
              +--------AlbumArt_{8434C6BC-AD8C-478E-8C5A-F34669574864}_Small.jpg
              +--------AlbumArt_{C9D7644E-29B3-41E0-B586-C01873419894}_Large.jpg
              +--------AlbumArt_{C9D7644E-29B3-41E0-B586-C01873419894}_Small.jpg
              +--------Folder.jpg
              +----Mezmerize (J:\Musique\System of a Down\Mezmerize)
              +--------01 - System of a Down - Soldier Side.mp3
              +--------02 - System of a Down - B.Y.O.B..mp3
              +--------03 - System of a Down - Revenga.mp3
              +--------04 - System of a Down - Cigaro.mp3
              +--------05 - System of a Down - Radio-Video.mp3
              +--------06 - System of a Down - This Cocaine Makes Me Feel Like I’m On This Song.mp3
              +--------07 - System of a Down - Violent Pornography.mp3
              +--------08 - System of a Down - Question!.mp3
              +--------09 - System of a Down - Sad Statue.mp3
              +--------10 - System of a Down - Old School Hollywood.mp3
              +--------11 - System of a Down - Lost in Hollywood.mp3
              +--------AlbumArtSmall.jpg
              +--------AlbumArt_{00716D5D-EEDA-4DAD-85A2-7F6F9D359A3A}_Large.jpg
              +--------AlbumArt_{00716D5D-EEDA-4DAD-85A2-7F6F9D359A3A}_Small.jpg
              +--------Folder.jpg
              +----Steal This Album! (J:\Musique\System of a Down\Steal This Album!)
              +--------01 - System of a Down - Chic N' Stu.mp3
              +--------02 - System of a Down - Innervision.mp3
              +--------03 - System of a Down - Bubbles.mp3
              +--------04 - System of a Down - Boom!.mp3
              +--------05 - System of a Down - Nüguns.mp3
              +--------06 - System of a Down - A.D.D.mp3
              +--------07 - System of a Down - Mr Jack.mp3
              +--------08 - System of a Down - I-E-A-I-A-I-O.mp3
              +--------09 - System of a Down - 36.mp3
              +--------10 - System of a Down - Picture.mp3
              +--------11 - System of a Down - Highway Song.mp3
              +--------12 - System of a Down - Fuck the Sytem.mp3
              +--------13 - System of a Down - Ego Brain.mp3
              +--------14 - System of a Down - Thetawaves.mp3
              +--------15 - System of a Down - Roulette.mp3
              +--------16 - System of a Down - Streamline.mp3
              +--------AlbumArtSmall.jpg
              +--------AlbumArt_{E7791A4E-5D33-4A2B-9505-6C1CFC41DDB0}_Large.jpg
              +--------AlbumArt_{E7791A4E-5D33-4A2B-9505-6C1CFC41DDB0}_Small.jpg
              +--------Folder.jpg
              +----System Of A Down (J:\Musique\System of a Down\System Of A Down)
              +--------01 - System of a Down - Suite pee.mp3
              +--------02 - System of a Down - Know.mp3
              +--------03 - System of a Down - Sugar.mp3
              +--------04 - System of a Down - Suggestions.mp3
              +--------05 - System of a Down - Spiders.mp3
              +--------06 - System of a Down - Ddevil.mp3
              +--------07 - System of a Down - Soil.mp3
              +--------08 - System of a Down - War.mp3
              +--------09 - System of a Down - Mind.mp3
              +--------10 - System of a Down - Peephole.mp3
              +--------11 - System of a Down - Cubert.mp3
              +--------12 - System of a Down - Darts.mp3
              +--------13 - System of a Down - P.L.U.C.K.mp3
              +--------14 - System of a Down - Marmalade.mp3
              +--------15 - System of a Down - Storaged.mp3
              +----Toxicity (J:\Musique\System of a Down\Toxicity)
              +--------01 - System of a Down - Prison Song.mp3
              +--------02 - System of a Down - Needles.mp3
              +--------03 - System of a Down - Deer Dance.mp3
              +--------04 - System of a Down - Jet Pilot.mp3
              +--------05 - System of a Down - X.mp3
              +--------06 - System of a Down - Chop Suey!.mp3
              +--------07 - System of a Down - Bounce.mp3
              +--------08 - System of a Down - Forest.mp3
              +--------09 - System of a Down - ATWA.mp3
              +--------10 - System of a Down - Science.mp3
              +--------11 - System of a Down - Shimmy.mp3
              +--------12 - System of a Down - Toxicity.mp3
              +--------13 - System of a Down - Psycho.mp3
              +--------14 - System of a Down - Aerials.mp3
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                8 août 2010 à 16:46:00

                Citation

                Une petite version utilisant l'instruction yield , ça m'a fait découvrir le module os un peu et os.path :)
                Testé uniquement sous Windows (je peux pas aller sous Linux pour le moment), j'aimerais un retour sous Linux, merci



                yield est une bonne idée, mais le principe est d'entrer un nom de répertoire et non un path.

                Est-ce que cela fonctionne si on entre simplement

                path_tree('System of a Down')
                


                ?

                Si il faut rentrer tout le path, c'est pas marrant :p
                • Partager sur Facebook
                • Partager sur Twitter
                  8 août 2010 à 16:57:13

                  Citation : fred1599

                  Citation

                  Une petite version utilisant l'instruction yield , ça m'a fait découvrir le module os un peu et os.path :)
                  Testé uniquement sous Windows (je peux pas aller sous Linux pour le moment), j'aimerais un retour sous Linux, merci



                  yield est une bonne idée, mais le principe est d'entrer un nom de répertoire et non un path.

                  Est-ce que cela fonctionne si on entre simplement

                  path_tree('System of a Down')
                  



                  ?

                  Si il faut rentrer tout le path, c'est pas marrant :p


                  Citation : Abraxasz

                  Le but est de créer un petit script, qui prend en entrée le chemin d'un répertoire


                  C'est toi qui a modifié la consigne de départ en recherchant le nom du chemin à partir d'un simple nom :o
                  Je m'amuserais peut être à le faire si l'envie m'en prend, mais bon le minimum serait de gérer le partitionnement du disque n'est ce pas ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    8 août 2010 à 17:03:55

                    Citation

                    C'est toi qui a modifié la consigne de départ en recherchant le nom du chemin à partir d'un simple nom



                    Je sais bien, mais je vois pas l'intérêt de rentrer un path. On peut pas connaître un path par coeur.

                    Citation

                    Je m'amuserais peut être à le faire si l'envie m'en prend, mais bon le minimum serait de gérer le partitionnement du disque n'est ce pas



                    peux-tu être plus précis? Veux-tu parler du nom du lecteur?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 août 2010 à 17:09:17

                      Citation : fred1599

                      Citation

                      C'est toi qui a modifié la consigne de départ en recherchant le nom du chemin à partir d'un simple nom



                      Je sais bien, mais je vois pas l'intérêt de rentrer un path. On peut pas connaître un path par coeur.


                      Ah bon ? Moi je vois pas l'interêt de rentrer un nom de dossier... Pour chercher mon dossier 'System of a Down' avec ton script, il a mis plus d'une minute juste pour fouiller C:, forcément il ne l'a pas trouvé, sachant que mon C a 25 Go d'occupé, je me demande le temps qu'il mettra sur mon disque dur externe avec 900 Go d'occupé !

                      Citation


                      Citation

                      Je m'amuserais peut être à le faire si l'envie m'en prend, mais bon le minimum serait de gérer le partitionnement du disque n'est ce pas



                      peux-tu être plus précis? Veux-tu parler du nom du lecteur?


                      Oui, comme dis juste avant, si je rentre 'System of a Down' dans ton code, il ne le trouve pas (vu qu'il ne se trouve pas du tout sur C).

                      Edit : Je n'ai pas dit que c'était facile ou faisable (en cherchant sur internet j'ai trouvé quelque chose à propos du module wmi) mais bon je ne vois pas l'utilité de la chose si elle ne permet pas de chercher sur tous les disques :) Enfin bon sous Linux le problème ne se pose pas :D
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 août 2010 à 17:22:04

                        Il est vrai que j'aurais pu faire une implémentation avec un générateur.
                        J'essaierai d'en faire une élégante dès que possible.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          8 août 2010 à 19:09:08

                          Citation

                          Moi je vois pas l'interêt de rentrer un nom de dossier... Pour chercher mon dossier 'System of a Down' avec ton script



                          Euh! J'ai pas dis que mon code avait un intérêt pour toi. Il en a d'ailleurs pas pour moi, windows a suffisamment d'outils qui permettent de le faire. Linux aussi, tant que j'y suis.

                          D'ailleurs quand tu fais une recherche, c'est le nom du dossier que tu cherches en général et pas un path.

                          Normalement quand tu rentres ton nom de dossier, tu as en réponse le choix entre plusieurs paths.

                          Citation

                          Pour chercher mon dossier 'System of a Down' avec ton script, il a mis plus d'une minute juste pour fouiller C:



                          Ba c'est pas si mal finalement, moi ça va beaucoup plus vite, mais j'ai pas un aussi gros disque dur. Cependant une minute c'est un temps raisonnable pour moi, j'ai le temps :)

                          Citation

                          Oui, comme dis juste avant, si je rentre 'System of a Down' dans ton code, il ne le trouve pas (vu qu'il ne se trouve pas du tout sur C).



                          Eh bien si tu connais ton path par coeur il doit être facile de savoir sur quel disque se trouve ton répertoire.
                          Qui puis-est c'est même pas la peine de faire une recherche, car tu sais déjà où se trouve ton répertoire.

                          Pour la modification du code par rapport au lecteur, avec win32api, tu as une fonction qui te permet de rechercher les disques logiques de ton PC.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 août 2010 à 19:31:43

                            Citation : ordiclic

                            Il est vrai que j'aurais pu faire une implémentation avec un générateur.
                            J'essaierai d'en faire une élégante dès que possible.


                            L'avantage avec les générateurs c'est qu'ils ne bouffent pas autant de mémoire que les listes (comme me l'a fait remarqué Candide :p ), enfin sur un exercice comme celui-ci ce n'est pas tellement génant !

                            Citation : fred1599

                            Citation

                            Moi je vois pas l'interêt de rentrer un nom de dossier... Pour chercher mon dossier 'System of a Down' avec ton script



                            Euh! J'ai pas dis que mon code avait un intérêt pour toi. Il en a d'ailleurs pas pour moi, windows a suffisamment d'outils qui permettent de le faire. Linux aussi, tant que j'y suis.

                            D'ailleurs quand tu fais une recherche, c'est le nom du dossier que tu cherches en général et pas un path.

                            Normalement quand tu rentres ton nom de dossier, tu as en réponse le choix entre plusieurs paths.


                            Je te cite : Je sais bien, mais je vois pas l'intérêt de rentrer un path. On peut pas connaître un path par coeur.
                            Depuis le départ c'est toi qui parle 'd'utilité' du code, pas moi ;)
                            Sinon faudra que tu m'expliques ta 2ème phrase... Qui a parlé de faire une recherche avec un path ?

                            Citation


                            Citation

                            Oui, comme dis juste avant, si je rentre 'System of a Down' dans ton code, il ne le trouve pas (vu qu'il ne se trouve pas du tout sur C).



                            Eh bien si tu connais ton path par coeur il doit être facile de savoir sur quel disque se trouve ton répertoire.
                            Qui puis-est c'est même pas la peine de faire une recherche, car tu sais déjà où se trouve ton répertoire.


                            Je le redis, c'est toi qui a parlé d'utilité. Je te dis juste que si tu fais vraiment un code pour faire une recherche, tu fais un code un minimum viable qui recherche partout sur l'ordinateur... Sinon je n'en vois pas plus l'utilité qu'un code dans lequel tu entres un path complet.

                            Enfin bref j'arrête le HS ici.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 août 2010 à 20:13:03

                              #!/usr/bin/python3
                              #! -*- coding:utf-8 -*-
                              import os
                              
                              def path_tree(path,level=0):
                                  #level correspond au niveau de l'arborescence du répertoire :
                                  #c'est utile pour mettre les ---- correctement.
                                  yield '{0}{1} ({2})'.format('+'+'-'*level*4, os.path.split(path)[1], \
                                      path)
                                  #On retourne directement le nom du répertoire, préalablement bien formaté,
                                  #pour ne pas avoir à le faire plus tard. Je devrais néanmoins tester
                                  #pour savoir si c'est bien un répertoire
                              
                                  for i in (os.path.join(path,j) for j in sorted(os.listdir(path))):
                                  #os.listdir(path) retourne une liste des éléments du répertoire, et non
                                  #des chemins vers ces éléments. Un generator expression, sorte de list 
                                  #comprehension qui retourne un générateur, est employée ici. Son rôle est
                                  #est utilisée pour fusionner le chemin du répertoire à celui des éléments,
                                  #avec os.path.join(path, élém) pour que ce soit propre.
                                      if os.path.isdir(i):
                                          for j in path_tree(i,level+1): 
                                              yield j
                                          #On appelle la fonction récursive avec un for, car c'est un 
                                          #générateur, avec en paramètre le nouveau répertoire... dont le nom
                                          #sera retourné au début de la fonction, donc pas besoin de s'en
                                          #soucier ici ; les résultats retournés par la fonction
                                          #appellée récursivement sont aussi retournés, en cascade.
                              
                                      elif os.path.isfile(i):
                                           yield '{0}{1}'.format('+'+'-'*(level+1)*4,os.path.split(i)[1])
                                           #On retourne le nom du fichier, préalablement formaté.
                              
                              for i in path_tree('C:\\music'):
                                  print(i)
                              


                              Toujours du code abondamment commenté, avec cette fois-ci des générateurs et toutes les explications qui s'imposent pour ceux qui ne connaissent pas. Et aussi, l'emploi de generator expressions à la place de lists comprehensions.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                8 août 2010 à 20:23:22

                                Pour rechercher tous les disques logiques de son PC

                                import win32api as w
                                w.GetLogicalDriveStrings().split("\x00")[:-1]
                                


                                • Partager sur Facebook
                                • Partager sur Twitter

                                [Exercice][Facile]Parcours de répertoires

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown