Wiki Python Fr   CodeSystemeDeFichier UserPreferences
 
HelpContents FindPage Diffs Info Edit Subscribe XML Print View

  1. Lister le contenu d'un répertoire
  2. Balayer des sous-répertoires
    1. Avec os.path.walk()
    2. Sans os.path.walk()
  3. Zipper un fichier
  4. Compresser mieux et très facilement
  5. Un Exemple utilisant quelques fonctions du systeme de fichier ...

1. Lister le contenu d'un répertoire

Lister tous les fichiers d'un répertoire
  1 
  2 
  3 
  4 
  5 
  6 
import os
depuis="c:\windows"
for file in os.listdir(depuis):
    chemin = os.path.join(depuis,file)
    if os.path.isfile(chemin):
      print chemin

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

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

2. Balayer des sous-répertoires

2.1. 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 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
import os.path, string

def listRep ( args, dirname, filenames ):
    print 'Dossier',dirname
    for filename in filenames:
        print ' Fichier',filename

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

2.2. Sans os.path.walk()

  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
import os, os.path
debut = "c:\\"
repertoires = [debut]
while len(repertoires)>0:
    repertoire = repertoires.pop()
    for nom in os.listdir(repertoire):
        chemin = os.path.join(repertoire,nom)
        if os.path.isfile(chemin):
            faireQuelquechoseAvecLeFichier(chemin)  # C'est un fichier
        elif os.path.isdir(chemin):
            repertoires.append(chemin)  # C'est un répertoire

Il vous suffit de remplacer faireQuelquechoseAvecLeFichier(chemin) par ce que vous voulez.

3. Zipper un fichier

Pour zipper le fichier programme.py dans monarchive.zip:

  1 
  2 
  3 
  4 
import zipfile
f = zipfile.ZipFile('monarchive.zip','w',zipfile.ZIP_DEFLATED)
f.write('programme.py')
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 
  2 
  3 
  4 
  5 
  6 
  7 
import zipfile
zfile = zipfile.ZipFile('monarchive.zip','r')
for filename in zfile.namelist():
    data = zfile.read(filename)
    file = open(filename, 'w+b')
    file.write(data)
    file.close()

4. 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 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
import bz2

texte = " *** Vive Python ! *** " * 50  # Texte original
comp = bz2.compress(texte)              # Texte compressé

print "Taille du texte :", len(texte)
print "Taille compressé:", len(comp)

print "Et on décompresse le texte:"

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".

5. 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 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
# -*- coding: utf8 -*-
import time
import os.path as dir
import os

print "Nettoyage du systeme des fichiers compilé/optimisé python"
basedir = dir.join("""C:\DEV""")
print basedir
print "Demarrage dans 2 secondes"
print "Appuyez sur <CTRL>+<C> pour annuler l'operation"
time.sleep(2)
print "Début du nettoyage ...."

def Clean(args, dirname, filenames):
    print "Scan du dossier:%s" % dirname
    for filename in filenames:
        Fichier = dir.join(dirname,filename)
        if(dir.splitext(Fichier)[1] == ".pyc" or dir.splitext(Fichier)[1] == ".pyo"):
            print "Suppression de %s" %Fichier
            os.remove(Fichier)
dir.walk(basedir, Clean, None )
print "Nettoyage Terminé !"


PythonPowered