filecmp — Jämförelser av filer och kataloger

Källkod: Lib/filecmp.py


Modulen filecmp definierar funktioner för att jämföra filer och kataloger, med olika valfria avvägningar mellan tid och korrekthet. För jämförelse av filer, se även modulen difflib.

Modulen filecmp definierar följande funktioner:

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

Jämför filerna med namnen f1 och f2 och returnerar True om de verkar vara lika, annars False.

Om shallow är sant och os.stat()-signaturerna (filtyp, storlek och ändringstid) för båda filerna är identiska, anses filerna vara lika.

I annat fall behandlas filerna som olika om deras storlek eller innehåll skiljer sig åt.

Observera att inga externa program anropas från denna funktion, vilket gör den portabel och effektiv.

Den här funktionen använder en cache för tidigare jämförelser och resultat, med cacheposter som ogiltigförklaras om os.stat()-informationen för filen ändras. Hela cacheminnet kan rensas med clear_cache().

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

Jämför filerna i de två katalogerna dir1 och dir2 vars namn anges av common.

Returnerar tre listor med filnamn: match, mismatch, errors. match innehåller listan över filer som matchar, mismatch innehåller namnen på de filer som inte matchar och errors innehåller namnen på de filer som inte kunde jämföras. Filer listas i errors om de inte finns i någon av katalogerna, om användaren saknar behörighet att läsa dem eller om jämförelsen inte kunde göras av någon annan anledning.

Parametern shallow har samma betydelse och standardvärde som för filecmp.cmp().

Till exempel kommer cmpfiles('a', 'b', ['c', 'd/e']) att jämföra a/c med b/c och a/d/e med b/d/e. 'c' och 'd/e' kommer var och en att finnas i en av de tre returnerade listorna.

filecmp.clear_cache()

Rensa filecmp-cachen. Detta kan vara användbart om en fil jämförs så snabbt efter att den har ändrats att det ligger inom det underliggande filsystemets mtime-upplösning.

Tillagd i version 3.4.

Klassen dircmp

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

Konstruerar ett nytt katalogjämförelseobjekt för att jämföra katalogerna a och b. ignore är en lista med namn som ska ignoreras, och standardvärdet är filecmp.DEFAULT_IGNORES. hide är en lista med namn som ska döljas, och standardvärdet är [os.curdir, os.pardir].

Klassen dircmp jämför filer genom att göra grunda jämförelser enligt beskrivningen för filecmp.cmp() som standard med parametern grunda.

Ändrad i version 3.13: Parametern shallow har lagts till.

Klassen dircmp tillhandahåller följande metoder:

report()

Skriv ut (till sys.stdout) en jämförelse mellan a och b.

report_partial_closure()

Skriv ut en jämförelse mellan a och b och gemensamma omedelbara underkataloger.

report_full_closure()

Skriv ut en jämförelse mellan a och b och gemensamma underkataloger (rekursivt).

Klassen dircmp erbjuder ett antal intressanta attribut som kan användas för att få olika typer av information om de katalogträd som jämförs.

Observera att via __getattr__()-hooks beräknas alla attribut lazilt, så det finns ingen hastighetsnedsättning om endast de attribut som är lätta att beräkna används.

left

Katalogen a.

right

Katalogen b.

left_list

Filer och underkataloger i a, filtrerade med hide och ignore.

right_list

Filer och underkataloger i b, filtrerade med hide och ignore.

common

Filer och underkataloger i både a och b.

left_only

Filer och underkataloger endast i a.

right_only

Filer och underkataloger endast i b.

common_dirs

Underkataloger i både a och b.

common_files

Filer i både a och b.

common_funny

Namn i både a och b, så att typen skiljer sig åt mellan katalogerna, eller namn för vilka os.stat() rapporterar ett fel.

same_files

Filer som är identiska i både a och b, med hjälp av klassens filjämförelseoperator.

diff_files

Filer som finns i både a och b, vars innehåll skiljer sig åt enligt klassens filjämförelseoperator.

funny_files

Filer som finns i både a och b, men som inte kunde jämföras.

subdirs

En ordbok som mappar namn i common_dirs till dircmp-instanser (eller MyDirCmp-instanser om denna instans är av typen MyDirCmp, en underklass till dircmp).

Ändrad i version 3.10: Tidigare var poster alltid instanser av dircmp. Nu är posterna av samma typ som self, om self är en underklass till dircmp.

filecmp.DEFAULT_IGNORES

Tillagd i version 3.4.

Lista över kataloger som ignoreras av dircmp som standard.

Här följer ett förenklat exempel på hur attributet subdirs används för att söka rekursivt genom två kataloger för att visa vanliga olika filer:

>>> 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)