python脚本--文件夹文件对比 发表于 2017-06-22 | 分类于 python 需求: 对比两个文件夹所有文件找出相同文件 遍历两个文件夹,逐个对比文件 相同的文件copy至新文件夹 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394#!/usr/bin/python#-*- coding:utf-8 -*-# import filecmpimport hashlibimport osimport shutildef getmd5(filename): file_text = open(filename,'rb').read() m = hashlib.md5(file_text) return m.hexdigest()def get_allfiles(filepath): filepaths = [] for parent,dirs,filenames in os.walk(filepath): for filename in filenames: if filename.startswith('.'): pass file = os.path.join(parent, filename) filepaths.append(file) return filepathsdef delete_samefile(filepath): delete_files = [] extentfile = [] md5files = {} allfilePath = get_allfiles(filepath) for file in allfilePath: filemd5 = getmd5(file) if filemd5 in md5files.keys(): # 将删除的文件名与保留的文件名一起打印出来 delete_files.append(file) filenameor = md5files[filemd5] delete_files.append(filenameor) os.remove(file) else : md5files[filemd5] = file extentfile.append(file) print(delete_files) print('\n') return extentfiledef hh_compare_file(filedir1,filedir2): if os.path.exists('./allhavefile'): shutil.rmtree('./allhavefile') os.mkdir('allhavefile') # 删除当前路径下重复的文件 fileresult1 = delete_samefile(filedir1) fileresult2 = delete_samefile(filedir2) for file in fileresult1: if os.path.isfile(file): for file2 in fileresult2: if os.path.isfile(file2): # 大小不同说明不一样 if os.stat(file2).st_size != os.stat(file).st_size : continue md5file1 = getmd5(file) md5file2 = getmd5(file2) if md5file1 == md5file2: shutil.copy(file,'./allhavefile') shutil.copy(file2,'./allhavefile') os.remove(file) os.remove(file2) breakprint ('# 1、删除文件路径下重复文件\n # 2、找出两个文件夹相同文件')str = input()if str == '1': print ("路径1:\n") filedir = input() delete_samefile(filedir)elif str == '2': print ("路径1:\n") filedir1 = input() print ("路径2:\n") filedir2 = input() hh_compare_file(filedir1,filedir2) 继续学习优化算法