# `filecmp` – Comparaisons de fichiers et de répertoires

Code source : Lib/filecmp.py

Le module `filecmp` définit les fonctions permettant de comparer les fichiers et les répertoires, avec différents compromis optionnels durée / exactitude. Pour comparer des fichiers, voir aussi le module `difflib`.

Le module `filecmp` définit les fonctions suivantes :

filecmp.cmp(f1, f2, shallow=True)

  Compare les fichiers nommés f1 et f2 , renvoie `True` s’ils semblent égaux, `False` sinon.

  If shallow is true and the `os.stat()` signatures (file type, size, and modification time) of both files are identical, the files are taken to be equal.

  Otherwise, the files are treated as different if their sizes or contents differ.

  Notez qu'aucun programme externe n'est appelé à partir de cette fonction, ce qui lui confère des qualités de portabilité et d'efficacité.

  Cette fonction utilise un cache pour les comparaisons antérieures et les résultats, les entrées du cache étant invalidées si les informations `os.stat()` du fichier sont modifiées. La totalité du cache peut être effacée avec `clear_cache()`.

filecmp.cmpfiles(dir1, dir2, common, shallow=True)

  Compare les fichiers des deux répertoires dir1 et dir2 dont les noms sont donnés par common.

  Renvoie trois listes de noms de fichiers : match , mismatch, errors. match contient la liste des fichiers qui correspondent, mismatch contient les noms de ceux qui ne correspondent pas et errors répertorie les noms des fichiers qui n'ont pas pu être comparés. Les fichiers sont répertoriés dans errors s'ils n'existent pas dans l'un des répertoires, si l'utilisateur ne dispose pas de l'autorisation nécessaire pour les lire ou si la comparaison n'a pas pu être effectuée pour une autre raison.

  Le paramètre shallow a la même signification et la même valeur par défaut que pour `filecmp.cmp()`.

  Par exemple, `cmpfiles('a', 'b', ['c', 'd/e'])` compare `a/c` et `b/c` et `a/d/e` avec `b/d/e`. `'c'` et `'d/e'` seront chacun dans l'une des trois listes renvoyées.

filecmp.clear_cache()

  Efface le cache filecmp. Cela peut être utile si un fichier est comparé juste après avoir été modifié (dans un délai inférieur à la résolution mtime du système de fichiers sous-jacent).

  Nouveau dans la version 3.4.

## La classe `dircmp`

class filecmp.dircmp(a, b, ignore=None, hide=None)

  Construct a new directory comparison object, to compare the directories a and b. ignore is a list of names to ignore, and defaults to `filecmp.DEFAULT_IGNORES`. hide is a list of names to hide, and defaults to `[os.curdir, os.pardir]`.

  La classe `dircmp` compare les fichiers en faisant des comparaisons superficielles comme décrit pour `filecmp.cmp()`.

  La classe `dircmp` fournit les méthodes suivantes :

  report()

    Affiche (sur `sys.stdout`) une comparaison entre a et b.

  report_partial_closure()

    Affiche une comparaison entre a et b et les sous-répertoires immédiats communs.

  report_full_closure()

    Affiche une comparaison entre a et b et les sous-répertoires communs (récursivement).

  La classe `dircmp` offre un certain nombre d'attributs intéressants qui peuvent être utilisés pour obtenir diverses informations sur les arborescences de répertoires comparées.

  Note that via `__getattr__()` hooks, all attributes are computed lazily, so there is no speed penalty if only those attributes which are lightweight to compute are used.

  left

    Le répertoire a.

  right

    Le répertoire b.

  left_list

    Fichiers et sous-répertoires dans a , filtrés par hide et ignore.

  right_list

    Fichiers et sous-répertoires dans b , filtrés par hide et ignore.

  common

    Fichiers et sous-répertoires à la fois dans a et b.

  left_only

    Fichiers et sous-répertoires uniquement dans a.

  right_only

    Fichiers et sous-répertoires uniquement dans b.

  common_dirs

    Sous-répertoires à la fois dans a et b.

  common_files

    Fichiers à la fois dans a et b.

  common_funny

    Noms dans a et b , tels que le type diffère entre les répertoires, ou noms pour lesquels `os.stat()` signale une erreur.

  same_files

    Fichiers identiques dans a et b, en utilisant l'opérateur de comparaison de fichiers de la classe.

  diff_files

    Fichiers figurant à la fois dans a et dans b , dont le contenu diffère en fonction de l'opérateur de comparaison de fichiers de la classe.

  funny_files

    Fichiers à la fois dans a et dans b , mais ne pouvant pas être comparés.

  subdirs

    A dictionary mapping names in `common_dirs` to `dircmp` instances (or MyDirCmp instances if this instance is of type MyDirCmp, a subclass of `dircmp`).

    Modifié dans la version 3.10: Previously entries were always `dircmp` instances. Now entries are the same type as self, if self is a subclass of `dircmp`.

filecmp.DEFAULT_IGNORES

  Nouveau dans la version 3.4.

  Liste des répertoires ignorés par défaut par `dircmp`.

Voici un exemple simplifié d'utilisation de l'attribut `subdirs` pour effectuer une recherche récursive dans deux répertoires afin d'afficher des fichiers communs différents :

    >>> from filecmp import dircmp
    >>> def print_diff_files(dcmp):
    ...     for name in dcmp.diff_files:
    ...         print("diff_file %s found in %s and %s" % (name, dcmp.left,
    ...               dcmp.right))
    ...     for sub_dcmp in dcmp.subdirs.values():
    ...         print_diff_files(sub_dcmp)
    ...
    >>> dcmp = dircmp('dir1', 'dir2')
    >>> print_diff_files(dcmp)