python脚本--文件夹文件对比

需求: 对比两个文件夹所有文件找出相同文件

  1. 遍历两个文件夹,逐个对比文件
  2. 相同的文件copy至新文件夹
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/python
#-*- coding:utf-8 -*-
# import filecmp
import hashlib
import os
import shutil
def 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 filepaths
def 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 extentfile
def 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)
break
print ('# 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)

继续学习优化算法