filecmp.cmp(f1, f2, shallow=True)
比较文件f1与f2,相同时返回True,不同返回False
当shallow为True时仅比较俩文件的os.stat签名,否则比较文件内容
filecmp.cmpfiles(dir1, dir2, common, shallow=True)
比较文件夹dir1与dir2下的common文件,shallow用法与filecmp.cmp相同
class filecmp.dircmp(a, b, ignore=None, hide=None)
report()
打印目录a,b下内容比较结果
report_partial_closure()
打印目录a,b及其相同子目录下内容比较结果
report_full_closure()
打印目录a,b及其共同子目录递归比较结果
left
目录a的名称
right
目录b的名称
left_list
目录a下内容
right_list
目录b下内容
common
目录a,b的共同内容
left_only
a中独有的内容
right_only
b中独有的内容
common_dirs
a,b相同子文件夹
common_files
a,b共同文件(文件名相同即可)
same_files
a,b共同文件(内容也要相同)
diff_files
a,b不同文件(文件名相同,内容不同)
subdirs
为common_dirs中共同文件夹创建一个dircmp类型的字典对象。
实际应用
此程序实现的功能为:比较两文件夹下的内容,找出相同文件和文件夹,不同文件(文件名相同,内容不同)以及每个文件夹独有内容,还可以通过-r参数对文件夹下相同文件夹中内容进行递归比较。
# -*- coding: utf-8 -*-
import argparse
import os.path
from filecmp import dircmp
#获取命令行参数
def getArgs():
parser = argparse.ArgumentParser(prog = 'dircmp', description = 'compare files and dirs between two directories')
parser.add_argument('d1', help = 'directory1')
parser.add_argument('d2', help = 'directory2')
parser.add_argument('--recurr', '-r', help = 'compare both current dir and subdir', action = 'store_true')
args = parser.parse_args()
return args
#打印文件夹比较结果
def print_compare_result(dcmp, r):
if r:
print(dcmp.report_full_closure())
else:
print(dcmp.report())
if __name__ == "__main__":
args = getArgs()
print_compare_result(dircmp(args.d1, args.d2), args.recurr)
程序需要两个必须的参数d1和d2,这两个参数提供要进行比较的文件夹;一个可选参数-r,指明是否递归比较文件夹下的相同子文件夹中内容。