2010-10-03 6 views
2

Je vais implémenter la comparaison de dossiers récursive sur python. À votre avis, quel serait le meilleur algorithme pour cela?Comparer les dossiers récursivement en utilisant python

  1. Obtenez deux listes des fichiers pour les dossiers
  2. Trier les deux listes
  3. Comparer en utilisant le module de filecmp pour un fichier
  4. Répétez l'opération pour chaque dossier récursive

En conséquence, je dois obtenir seulement la liste des fichiers qui sont différents (différence de contenu n'est pas nécessaire ici), la liste des fichiers qui manquent dans l'un des dossiers comparables.

Merci.

Répondre

1

Si j'étais vous, je vérifierais si un autre logiciel n'implémente pas déjà cette fonctionnalité, comme rsync ou diff. Pour ce que je vois, les deux ont les caractéristiques dont vous avez besoin. Il y a plus d'informations à ce sujet here.

Si vous avez vraiment besoin de le faire en Python, je modifierais légèrement votre algorithme, ce qui en fait ressembler à ceci:

  1. Stocker tous les contenus des chemins dans deux variables de liste séparées en utilisant os.walk;
  2. Effectuez une itération sur chaque valeur de la première liste pour trouver une valeur correspondante dans la deuxième liste;
  3. Si une valeur correspondante a été trouvée, comparez-la en utilisant le module filecmp. Sinon, affichez le fichier manquant;
  4. Supprimer la valeur de la deuxième liste;
  5. Aller au numéro 2 jusqu'à ce que la première liste soit vide;
  6. Imprime tout ce qui reste dans la deuxième liste;
+0

On dirait que vous gagnerez de la vitesse en utilisant des ensembles au lieu de listes. – intuited

+0

Qu'en est-il si je voudrais avoir le nouveau fichier dans la deuxième liste, mais qui manque dans la première liste? Selon ces étapes, j'aurais la même liste de fichiers qui étaient initialement seulement dans la première liste. Peut-être que vous pouvez écrire ici l'exemple de code en fonction de l'étape que vous avez listée? – yart

2

Effectuez une recherche récursive sur le répertoire et pour chaque magasin de fichiers md5 ou sha checksum du fichier dans le dictionnaire en tant que clé et chemin/nom en tant que valeur. Faites ce dictionnaire pour les deux répertoires. Ensuite, vous pouvez supprimer des paires de chaque répertoire et le résultat est manquant/fichiers différents.

Cela rendra O (n) algorhitm simple, où n est le volume du répertoire.

Questions connexes