[PageD'Accueil] [IndexDesTitres] [IndexDesTermes

Lister le contenu d'un répertoire

Lister tous les fichiers d'un répertoire

   1 import os
   2 depuis="c:\windows"
   3 for file in os.listdir(depuis):
   4     chemin = os.path.join(depuis,file)
   5     if os.path.isfile(chemin):
   6       print chemin

Lister tous les fichiers EXE du répertoire c:\windows:

   1 import glob
   2 for nomfichier in glob.glob(r'c:\windows\*.exe'):
   3     print nomfichier

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:

   1 import os.path, string
   2 
   3 def listRep ( args, dirname, filenames ):
   4     print 'Dossier',dirname
   5     for filename in filenames:
   6         print ' Fichier',filename
   7 
   8 os.path.walk('c:\\', listRep, None )

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:

   1 import zipfile
   2 f = zipfile.ZipFile('monarchive.zip','w',zipfile.ZIP_DEFLATED)
   3 f.write('programme.py')
   4 f.close()

(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:

   1 import zipfile
   2 zfile = zipfile.ZipFile('monarchive.zip','r')
   3 for filename in zfile.namelist():
   4     data = zfile.read(filename)
   5     file = open(filename, 'w+b')
   6     file.write(data)
   7     file.close()

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.

   1 import bz2
   2 
   3 texte = " *** Vive Python ! *** " * 50  # Texte original
   4 comp = bz2.compress(texte)              # Texte compressé
   5 
   6 print "Taille du texte :", len(texte)
   7 print "Taille compressé:", len(comp)
   8 
   9 print "Et on décompresse le texte:"
  10 print bz2.decompress(comp)

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()

2016-06-05 21:42