Python: Comparaison de dossiers

Comparer le contenu de fichiers communs à deux dossiers (par exemple pour comparer les sources JAVA entre un environnement de DEV et un environnement de PROD) est relativement simple avec Python et le module Path.

La classe Path du module pathlib est indispensable pour tout ce qui touche au système de fichiers.
Il contient tout un tas d'outils très simple d'utilisation et qui facilite grandement toutes les opérations à faire.

J'utilise également la classe md5 du module hashlib afin de calculer la somme md5 de chaque fichier.

Import de la classe Path du module pathlib et de la classe md5 du module hashlib

>>> from pathlib import Path
>>> from hashlib import md5

Initialisation des deux dossiers à comparer.

>>> D1 = Path(r'd:\dossier1')
>>> D2 = Path(r'd:\dossier2')

A l'aide de la méthode rglob, je parcours récursivement tous les fichiers JAVA présents dans le dossier.
La méthode relative_to permet d'obtenir le chemin du fichier relatif à la racine (passée en paramètre).
La méthode exists permet de tester l'existence du fichier.
La méthode read_bytes permet d'accéder directement au contenu du fichier en mode binaire.
La méthode hexdigest de la classe md5 permet de calculer en hexadécimal la somme md5 du contenu du fichier.

>>> for file in D1.rglob('*.java'):
    file2 = D2/ file.relative_to(D1)
    if file2.exists():
        if md5(file.read_bytes()).hexdigest() != md5(file2.read_bytes()).hexdigest():
            print(f'Le fichier {file.relative_to(D1)} est différent entre {D1.as_posix()} et {D2.as_posix()}')
    else:
        print(f'Le fichier {file.relative_to(D1)} n\'existe pas dans {D2.as_posix()}')

infoUtilisation des f-strings pour l'affichage des messages.

Ajouter un commentaire

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.