55
Commentaire:
|
3291
|
Texte supprimé. | Texte ajouté. |
Ligne 2: | Ligne 2: |
Ce TP met en œuvre la notion de parcours dans un arbre. L’arbre en question est celui du système de fichiers : c’est donc l’occasion d’introduire un peu de programmation système en Python 3. == Tâche 1 : recherche de fichier == On va écrire un programme : * qui prend en entrée un `dossier` et un `nom` de fichier, * qui recherche si un fichier `nom` apparait dans le `dossier` ou dans ses sous-dossiers, * qui affiche le chemin complet vers ce fichier. === Préliminaires === Pour obtenir la liste des éléments d’un dossier, on utilise la fonction `os.listdir` : {{{#!highlight python import os os.listdir() }}} affichera le contenu du dossier courant (sous Windows, c’est probablement celui où se trouve l’interpréteur python). Testez. Pour savoir si un chemin mène vers un dossier ou un fichier, on utilise la fonction `os.path.isdir`. Testez. === Au travail === Mettez d’abord au point un algorithme de parcours dans le système de fichier : de quelle structure s’agit-il (un arbre, oui, mais de quel genre) ? quel parcours faire ? Écrivez alors une fonction : {{{#!highlight python def cherche_fichier(dossier,nom): ... }}} qui renvoie la liste des chemins des fichiers `nom` accessibles à partir de `dossier`. === Extensions possibles === Si vous êtes à l’aise, vous pouvez considérer les extensions suivantes. Si vous avez déjà passé beaucoup de temps sur ce qui précède, mieux vaut passer à la tâche 2. ==== Permettre de rechercher un sous-mot ==== Si on cherche tous les fichiers python, la fonction précédente ne sert pas à grand chose. On voudrait utiliser des motifs du genre `*.py`. Ça tombe bien, il y a aussi une bibliothèque python pour ça : `fnmatch`. {{{#!highlight python >>> import fnmatch >>> fnmatch.fnmatch('toto.py', '*.py') True >>> fnmatch.fnmatch('totopy', '*.py') False }}} Étendez la fonction de recherche en : {{{#!highlight python def cherche_motif(dossier,motif): ... }}} ==== Recherche multicritère: nom, taille, date, ... ==== On peut connaître la taille d’un fichier avec la fonction `os.path.getsize`. La date de dernière modification est obtenue avec `os.getmtime`. Genéralisez la fonction de recherche en : {{{#!highlight python def cherche_test(dossier,test): ... }}} où `test` spécifie des critères à vérifier pour qu’un fichier soit retenu. On discutera ensemble des solutions possibles pour donner ces critères (c’est la seule vraie difficulté ici). == Tâche 2 : calcul de l’occupation du disque == On cherche maintenant à estimer l’espace disque occupé par le contenu d’un dossier (et de ses sous-dossiers). Rappelons (?) que la taille d’un fichier est donnée par la fonction `os.path.getsize` : {{{#!highlight python import os for i in os.listdir(): print('{fichier}\t{taille}'.format( fichier=i, taille=os.path.getsize(), )) }}} === Spécification du problème === === Quelques indications === == Si ce qui précède n’a été qu’une promenade pour vous == Créez une interface graphique pour l’un des programmes précédents. |
C’est la séance 1B5 de la formation 2012-2013.
Ce TP met en œuvre la notion de parcours dans un arbre. L’arbre en question est celui du système de fichiers : c’est donc l’occasion d’introduire un peu de programmation système en Python 3.
Tâche 1 : recherche de fichier
On va écrire un programme :
qui prend en entrée un dossier et un nom de fichier,
qui recherche si un fichier nom apparait dans le dossier ou dans ses sous-dossiers,
- qui affiche le chemin complet vers ce fichier.
Préliminaires
Pour obtenir la liste des éléments d’un dossier, on utilise la fonction os.listdir :
affichera le contenu du dossier courant (sous Windows, c’est probablement celui où se trouve l’interpréteur python).
Testez.
Pour savoir si un chemin mène vers un dossier ou un fichier, on utilise la fonction os.path.isdir.
Testez.
Au travail
Mettez d’abord au point un algorithme de parcours dans le système de fichier : de quelle structure s’agit-il (un arbre, oui, mais de quel genre) ? quel parcours faire ?
Écrivez alors une fonction :
qui renvoie la liste des chemins des fichiers nom accessibles à partir de dossier.
Extensions possibles
Si vous êtes à l’aise, vous pouvez considérer les extensions suivantes. Si vous avez déjà passé beaucoup de temps sur ce qui précède, mieux vaut passer à la tâche 2.
Permettre de rechercher un sous-mot
Si on cherche tous les fichiers python, la fonction précédente ne sert pas à grand chose. On voudrait utiliser des motifs du genre *.py. Ça tombe bien, il y a aussi une bibliothèque python pour ça : fnmatch.
Étendez la fonction de recherche en :
Recherche multicritère: nom, taille, date, ...
On peut connaître la taille d’un fichier avec la fonction os.path.getsize. La date de dernière modification est obtenue avec os.getmtime.
Genéralisez la fonction de recherche en :
où test spécifie des critères à vérifier pour qu’un fichier soit retenu. On discutera ensemble des solutions possibles pour donner ces critères (c’est la seule vraie difficulté ici).
Tâche 2 : calcul de l’occupation du disque
On cherche maintenant à estimer l’espace disque occupé par le contenu d’un dossier (et de ses sous-dossiers).
Rappelons (?) que la taille d’un fichier est donnée par la fonction os.path.getsize :
Spécification du problème
Quelques indications
Si ce qui précède n’a été qu’une promenade pour vous
Créez une interface graphique pour l’un des programmes précédents.