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, annarsFalse
.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 medclear_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öraa/c
medb/c
ocha/d/e
medb/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örfilecmp.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
tilldircmp
-instanser (eller MyDirCmp-instanser om denna instans är av typen MyDirCmp, en underklass tilldircmp
).
- 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)