用法:
python diff.py ./folder1/ ./folder2/
写法简陋,未做异常处理,只是工作需要临时写的。
#coding=utf8
import os
import sys
def print_red(s, endl=""):
print("\033[31;1m%s\033[0m"%s, end=endl)
def print_black(s, endl=""):
print(s, end=endl)
def compare_folder(dir1, dir2):
files1 = os.listdir(dir1)
files2 = os.listdir(dir2)
if len(files1) != len(files2):
print_red("文件个数不一样:\n[%s] %d\n[%s] %d"%(dir1, len(files1), dir2, len(files2)), endl="\n")
return
hash = set()
for file in files1:
f1 = open(dir1 + "/" + file)
f2 = open(dir2 + "/" + file)
line1 = f1.readline()
line2 = f2.readline()
num = 0
while line1 and line2:
num += 1
if line1 != line2:
line1 = dir1 + "/" + file + "[" + str(num) + "]: " + line1
line2 = dir2 + "/" + file + "[" + str(num) + "]: " + line2
hash.add(file)
for i in range(min(len(line1), len(line2))):
if line1[i] == line2[i]:
print_black(line1[i])
else:
print_red(line1[i])
if len(line1) > len(line2):
print_red(line1[len(line2):])
# print("")
for i in range(min(len(line1), len(line2))):
if line1[i] == line2[i]:
print_black(line2[i])
else:
print_red(line2[i])
if len(line2) > len(line1):
print_red(line2[len(line1):])
print("")
line1 = f1.readline()
line2 = f2.readline()
f1.close()
f2.close()
print("有差异的文件个数:", len(hash))
print("有差异的文件:", hash)
print("")
if __name__ == "__main__":
dir1 = sys.argv[1]
dir2 = sys.argv[2]
compare_folder(dir1, dir2)