Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
comparefichiers [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


comparefichiers

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
comparefichiers [2009/03/16 16:06]
tyrtamos
comparefichiers [2009/03/16 16:48]
tyrtamos
Ligne 4: Ligne 4:
  
 Dire si 2 fichiers ont le même contenu, sans tenir compte des dates ni des autres propriétés (à part la longueur, bien entendu). Dire si 2 fichiers ont le même contenu, sans tenir compte des dates ni des autres propriétés (à part la longueur, bien entendu).
 +
 +===== Solution proposée =====
 +
 +Faire une lecture binaire du contenu des 2 fichiers pour les comparer.
 +
 +Cette lecture/comparaison est progressive, et permet de s'arrêter au 1er écart trouvé.
 +
 +Il faut, bien sûr, gérer toutes les erreurs possibles: fichier n'existe pas, ou erreur d'ouverture, de lecture ou de fermeture.
  
 ===== Code proposé ===== ===== Code proposé =====
Ligne 13: Ligne 21:
 import os import os
  
-def compfichiers(nf1nf2, lgbuf=32*1024):+def compfichiers(nf1cnf2c, lgbuf=32*1024):
     """Compare les 2 fichiers et renvoie True seulement s'ils ont un contenu identique"""     """Compare les 2 fichiers et renvoie True seulement s'ils ont un contenu identique"""
     f1 = f2 = None     f1 = f2 = None
     result = False     result = False
     try:     try:
-        if os.path.getsize(nf1) == os.path.getsize(nf2): +        if os.path.getsize(nfc1) == os.path.getsize(nfc2): 
-            f1 = open(nf1, "rb"+            f1 = open(nfc1, "rb"
-            f2 = open(nf2, "rb")+            f2 = open(nfc2, "rb")
             while True:             while True:
                 buf1 = f1.read(lgbuf)                 buf1 = f1.read(lgbuf)
Ligne 39: Ligne 47:
  
 \\ \\
-Les 2 arguments nf1 et nf2 doivent être des noms de fichiers complets avec leur chemin.+Les 2 arguments nfc1 et nfc2 doivent être des **n**oms de **f**ichiers **c**omplets avec leur chemin.
  
 Je n'ai pas essayé, mais a priori, le code devrait être multi-plateforme. Je n'ai pas essayé, mais a priori, le code devrait être multi-plateforme.
Ligne 49: Ligne 57:
     * False s'ils ne le sont pas     * False s'ils ne le sont pas
  
-    * Une exception si une erreur est intervenue (ouverture, lecture, fermeture)+    * Une exception si une erreur est intervenue (fichier inconnu, erreur d'ouverture, de lecture, de fermeture)
  
 +\\
 Voilà comment on y fait appel dans ces 3 cas: Voilà comment on y fait appel dans ces 3 cas:
  
comparefichiers.txt · Dernière modification: 2010/04/11 07:39 de tyrtamos