filecmp — Datei- und Verzeichnisvergleiche¶
Quellcode: Lib/filecmp.py
Das Modul filecmp definiert Funktionen zum Vergleichen von Dateien und Verzeichnissen mit verschiedenen optionalen Zeit-/Korrektheitskompromissen. Zum Vergleichen von Dateien siehe auch das Modul difflib.
Das Modul filecmp definiert die folgenden Funktionen
- filecmp.cmp(f1, f2, shallow=True)¶
Vergleicht die Dateien mit den Namen f1 und f2 und gibt
Truezurück, wenn sie gleich zu sein scheinen, andernfallsFalse.Wenn shallow wahr ist und die Signaturen von
os.stat()(Dateityp, Größe und Änderungszeit) beider Dateien identisch sind, werden die Dateien als gleich betrachtet.Andernfalls werden die Dateien als unterschiedlich behandelt, wenn ihre Größen oder Inhalte abweichen.
Beachten Sie, dass von dieser Funktion keine externen Programme aufgerufen werden, was sie portabel und effizient macht.
Diese Funktion verwendet einen Cache für frühere Vergleiche und deren Ergebnisse, wobei Cache-Einträge ungültig werden, wenn sich die
os.stat()-Informationen für die Datei ändern. Der gesamte Cache kann mitclear_cache()geleert werden.
- filecmp.cmpfiles(dir1, dir2, common, shallow=True)¶
Vergleicht die Dateien in den beiden Verzeichnissen dir1 und dir2, deren Namen durch common gegeben sind.
Gibt drei Listen von Dateinamen zurück: match, mismatch und errors. match enthält die Liste der Dateien, die übereinstimmen, mismatch enthält die Namen derjenigen, die nicht übereinstimmen, und errors listet die Namen der Dateien auf, die nicht verglichen werden konnten. Dateien werden in errors aufgeführt, wenn sie in einem der Verzeichnisse nicht existieren, der Benutzer keine Berechtigung zum Lesen hat oder der Vergleich aus irgendeinem anderen Grund nicht durchgeführt werden konnte.
Der Parameter shallow hat die gleiche Bedeutung und den gleichen Standardwert wie für
filecmp.cmp().Zum Beispiel vergleicht
cmpfiles('a', 'b', ['c', 'd/e'])a/cmitb/cunda/d/emitb/d/e.'c'und'd/e'werden jeweils in einer der drei zurückgegebenen Listen enthalten sein.
- filecmp.clear_cache()¶
Leert den filecmp-Cache. Dies kann nützlich sein, wenn eine Datei so schnell nach ihrer Änderung verglichen wird, dass sie innerhalb der mtime-Auflösung des zugrunde liegenden Dateisystems liegt.
Hinzugefügt in Version 3.4.
Die Klasse dircmp¶
- class filecmp.dircmp(a, b, ignore=None, hide=None, *, shallow=True)¶
Konstruiert ein neues Verzeichnisvergleichsobjekt zum Vergleichen der Verzeichnisse a und b. ignore ist eine Liste von Namen, die ignoriert werden sollen, und hat standardmäßig
filecmp.DEFAULT_IGNORES. hide ist eine Liste von Namen, die versteckt werden sollen, und hat standardmäßig[os.curdir, os.pardir].Die Klasse
dircmpvergleicht Dateien standardmäßig mit flachen Vergleichen, wie fürfilecmp.cmp()beschrieben, unter Verwendung des Parameters shallow.Geändert in Version 3.13: Der Parameter shallow wurde hinzugefügt.
Die Klasse
dircmpbietet die folgenden Methoden- report()¶
Gibt (an
sys.stdout) einen Vergleich zwischen a und b aus.
- report_partial_closure()¶
Gibt einen Vergleich zwischen a und b sowie gemeinsamen unmittelbaren Unterverzeichnissen aus.
- report_full_closure()¶
Gibt einen Vergleich zwischen a und b sowie gemeinsamen Unterverzeichnissen (rekursiv) aus.
Die Klasse
dircmpbietet eine Reihe interessanter Attribute, die verwendet werden können, um verschiedene Informationen über die verglichenen Verzeichnisstrukturen zu erhalten.Beachten Sie, dass über
__getattr__()-Hooks alle Attribute verzögert berechnet werden, sodass es keine Geschwindigkeitsnachteile gibt, wenn nur Attribute verwendet werden, deren Berechnung leicht ist.- left¶
Das Verzeichnis a.
- right¶
Das Verzeichnis b.
- left_list¶
Dateien und Unterverzeichnisse in a, gefiltert nach hide und ignore.
- right_list¶
Dateien und Unterverzeichnisse in b, gefiltert nach hide und ignore.
- common¶
Dateien und Unterverzeichnisse in a und b.
- left_only¶
Dateien und Unterverzeichnisse nur in a.
- right_only¶
Dateien und Unterverzeichnisse nur in b.
- common_dirs¶
Unterverzeichnisse in a und b.
- common_files¶
Dateien in a und b.
- common_funny¶
Namen in a und b, bei denen sich der Typ zwischen den Verzeichnissen unterscheidet, oder Namen, für die
os.stat()einen Fehler meldet.
- same_files¶
Dateien, die in a und b identisch sind, unter Verwendung des Datei-Vergleichsoperators der Klasse.
- diff_files¶
Dateien, die sowohl in a als auch in b vorhanden sind und deren Inhalte gemäß dem Datei-Vergleichsoperator der Klasse abweichen.
- funny_files¶
Dateien, die sowohl in a als auch in b vorhanden sind, aber nicht verglichen werden konnten.
- subdirs¶
Ein Wörterbuch, das Namen aus
common_dirsaufdircmp-Instanzen (oder MyDirCmp-Instanzen, wenn diese Instanz vom Typ MyDirCmp, einer Unterklasse vondircmp, ist) abbildet.
- filecmp.DEFAULT_IGNORES¶
Hinzugefügt in Version 3.4.
Liste der Verzeichnisse, die von
dircmpstandardmäßig ignoriert werden.
Hier ist ein vereinfachtes Beispiel für die Verwendung des Attributs subdirs, um rekursiv durch zwei Verzeichnisse zu suchen und gemeinsame unterschiedliche Dateien anzuzeigen.
>>> 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)