Sommaire
Lister le contenu d'un répertoire
Lister tous les fichiers d'un répertoire
Lister tous les fichiers EXE du répertoire c:\windows:
Balayer des sous-répertoires
Avec os.path.walk()
Encore une fonction bien pratique fournie avec Python: os.path.walk() permet de balayer automatiquement une arboresence et ses sous-répertoires.
Par exemple, voici un petit programme qui se balade dans les sous-répertoire de votre disque dur et affiche les noms des fichiers:
La fonction listRep est appelée automatiquement pour chaque répertoire rencontré. dirname contient le chemin complet du répertoire. filenames est une liste de fichiers contenus dans ce répertoire.
Facile ensuite de faire ce qu'on veut sur chacun des fichiers.
Le plus chouette, c'est que ça fonctionne sous Windows, Dos, Unix, Macintosh et tous les systèmes sur lequel Python existe, sans modification.
Pas besoin de développer des fonctions particulières pour chaque OS. Pas besoin non plus de différencier le séparateur de répertoire (\ sous Windows, / sous Unix, : sur Macintosh...).
Sans os.path.walk()
1 import os, os.path
2 debut = "c:\\"
3 repertoires = [debut]
4 while len(repertoires)>0:
5 repertoire = repertoires.pop()
6 for nom in os.listdir(repertoire):
7 chemin = os.path.join(repertoire,nom)
8 if os.path.isfile(chemin):
9 faireQuelquechoseAvecLeFichier(chemin) # C'est un fichier
10 elif os.path.isdir(chemin):
11 repertoires.append(chemin) # C'est un répertoire
Il vous suffit de remplacer faireQuelquechoseAvecLeFichier(chemin) par ce que vous voulez.
Zipper un fichier
Pour zipper le fichier programme.py dans monarchive.zip:
(Ici, on a appelé en mode 'w' pour créer le fichier zip ; pour ajouter des fichiers à un fichier ZIP existant, on aurait utilisé 'a'.)
Et pour dézipper tous les fichiers d'un ZIP:
Compresser mieux et très facilement
Depuis Python 2.3, le module bz2 fait partie des librairies standards de Python. C'est un module de compression plus puissant que ZIP. Il est très facile à utiliser.
Résultat:
Taille du texte : 1150 Taille compressé: 76 Et on décompresse le texte: *** Vive Python ! *** *** Vive Python ! *** *** Vive Python ! *** *** Vive P ython ! *** *** Vive Python ! *** *** Vive Python ! *** *** Vive Python ! *** *** Vive Python ! *** *** Vive Python ! *** *** Vive Python ! *** *** Vive ...
Vous pouvez également jeter un coup d'oeil sur le module zlib, qui compresse moins bien mais plus vite.
Vous noterez au passage le *50, que Python sait parfaitement interpréter comme "50 fois la chaine".
Un Exemple utilisant quelques fonctions du systeme de fichier ...
Voila un petit exemple qui utilise plusieurs fonctions du systeme de fichiers c'est un petit script qui permet de 'nettoyer' le systeme des fichiers pyc,pyo j'utilise os.path.walk pour naviguer dans les dossiers , et os.path.splitext me permet de recuperer l'extention du fichier (ici je cherche .pyc ou .pyo) vous devez juste modifier le repertoire de base dans la variable basedir
1 # -*- coding: utf8 -*-
2 import time
3 import os.path as dir
4 import os
5
6 print "Nettoyage du systeme des fichiers compilé/optimisé python"
7 basedir = dir.join("""C:\DEV""")
8 print basedir
9 print "Demarrage dans 2 secondes"
10 print "Appuyez sur <CTRL>+<C> pour annuler l'operation"
11 time.sleep(2)
12 print "Début du nettoyage ...."
13
14 def Clean(args, dirname, filenames):
15 print "Scan du dossier:%s" % dirname
16 for filename in filenames:
17 Fichier = dir.join(dirname,filename)
18 if(dir.splitext(Fichier)[1] == ".pyc" or dir.splitext(Fichier)[1] == ".pyo"):
19 print "Suppression de %s" %Fichier
20 os.remove(Fichier)
21 dir.walk(basedir, Clean, None )
22 print "Nettoyage Terminé !"
23 input()