filecmp是python的一个内置模块,用来比较文件或者文件夹是否相同,http://docs.python.org/library/filecmp.html,还是看看filecmp有哪些属性和方法吧

其中比较核心的就是cmp,cmpfiles,dircmp

1. filecmp.cmp(f1, f2[, shallow])

其实就是比较2个文件,f1,f2,后面还有一个参数就是shallow,是否考虑文件的属性,如创建时间,权限等等。默认是False

2.  filecmp.cmpfiles(dir1, dir2, common[, shallow])

比较2个文件夹里指定的文件。

3.  filecmp.dircmp,这是一个类

report():只比较指定文件夹中的内容(文件与文件夹)

report_partial_closure():比较文件夹及第一级子文件夹的内容

report_full_closure():递归比较所有的文件夹的内容,仅仅是一个报告

但是有一个缺点是就没有方法能递归的得到比较的结果。而这个正是我想要的,递归的得到删除集合,修改集合

delete_files = []
copy_files = []
def
_cmpdir(r):
global delete_files,copy_files
delete_files
+= [os.path.join(r.left,l) for l in r.left_only if not l.startswith('.')]
copy_files
+= [os.path.join(r.right,l )for l in r.right_only if not l.startswith('.')]
copy_files
+= [os.path.join(r.right,l) for l in r.diff_files if not l.startswith('.')]
for sd in r.subdirs.itervalues():
    _cmpdir(sd)

return delete_files,copy_files

另外

left_list:左边文件夹中的文件与文件夹列表;

right_list:右边文件夹中的文件与文件夹列表;

common:两边文件夹中都存在的文件或文件夹;

left_only:只在左边文件夹中存在的文件或文件夹;

right_only:只在右边文件夹中存在的文件或文件夹;

common_dirs:两边文件夹都存在的子文件夹;

common_files:两边文件夹都存在的子文件;

common_funny:两边文件夹都存在的子文件夹;

same_files:匹配的文件;

diff_files:不匹配的文件;

funny_files:两边文件夹中都存在,但无法比较的文件;

subdirs:common_dirs里的filecmp.dircmp对象