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()}
')
Utilisation des f-strings pour l'affichage des messages.