TP-1: retour aux fondamentaux

Un petit TP simple pour revenir aux bases et raccrocher les wagons !

Exercice 1

On souhaite compter le nombre de fichiers situés dans un répertoire donné, et tous ses sous-répertoires. Autrement dit, cela revient à exécuter la commande « find mon-repertoire -type f | wc -l ».


À utiliser :



  • import os (pour charger le module os, qui contient plein de fonctions utiles)


  • import sys (pour utiliser sys.argv, qui contient les arguments du programme)



  • os.listdir(un_repertoire) # renvoie le contenu du répertoire sous forme de liste

  • len(une_liste) # renvoie le nombre d’éléments d’une liste

  • os.path.isdir(un_chemin_de_fichier_ou_repertoire) # renvoie True si le chemin est un répertoire, False sinon

  • os.path.isfile(un_chemin) # devinez ce que fait cette fonction, à partir de la description de la précédente …

  • os.path.islink(un_chemin) # et celle-ci !


Doc pour avoir des détails :



  • http://docs.python.org/lib/filesys.html


  • http://docs.python.org/lib/module-os.path.html




À méditer pour partir dans la bonne direction :



« Le nombre de fichiers contenu dans un répertoire et ses sous-répertoires, c’est le nombre de fichiers contenus dans le répertoire, additionné au nombre de fichiers contenus dans chaque sous-répertoire. Et ainsi de suite, récursivement. »



Exercice 2



On souhaite trouver le plus gros fichier situé dans un répertoire donné et ses sous-répertoires. On affichera le chemin complet vers ce fichier, ainsi que sa taille.


À utiliser :



  • os.stat(chemin_vers_fichier) # renvoie une structure complexe contenant, entre autres, la taille du fichier

  • os.stat(chemin_vers_fichier).st_size # permet de récupérer la taille dans cette structure

  • max(x,y) # renvoie le plus grand des deux éléments



À méditer pour partir dans la bonne direction :



« On peut garder deux variables “chemin_candidat” et “taille_candidat”, contenant respectivement le chemin complet vers le plus grand fichier trouvé jusqu’à présent, et sa taille. On peut les initialiser avec un nom vide et une taille nulle ; puis on parcourt l’ensemble des répertoires et sous-répertoires, comme dans l’exercice 1, et on compare chaque fichier rencontré avec notre candidat. Si le fichier est plus grand que le candidat, il remplace le candidat. Une fois le parcours fini, on a trouvé le plus grand fichier ! »


Exercice 3


Un peu plus compliqué : on souhaite trouver les 10 plus gros fichiers dans un répertoire et ses sous-répertoires.


À utiliser :


Les fonctions de manipulation de listes !



  • ma_liste = ma_liste + [mon_element] # ajoute un élément à la fin de la liste

  • ma_liste.sort() # trie la liste

  • ma_liste = ma_liste[:10] # ne garde que les dix premiers éléments de la liste

  • ma_liste = ma_liste[-10:] # ne garde que les dix derniers éléments de la liste

  • ma_liste.reverse() # inverse l’ordre des éléments d’une liste


Indice :



« Cette fois-ci, au lieu d’avoir un seul candidat, on va en avoir 10 : les 10 plus gros fichiers. Et pour se faciliter la vie, on pourrait les enregistrer sous forme de couple, en mettant dans l’ordre : (taille_du_candidat, chemin_du_candidat). Ainsi, quand on trie la liste avec la fonction sort(), on trie les fichiers par taille, et les 10 plus gros fichiers se retrouveront au début – ou à la fin. »



Exercice 4



Pour aller plus loin : utiliser la fonction génératrice os.walk() pour refaire les exercices 1 à 3 de manière plus simple.