Difflib作为python的标准库,无需安装,作用是对比文本之间的差异,而且支持输出可读性比较强的HTML文档,与Linux下的vimdiff命令类似,我们可以比对文本、配置文件之间的差异,在版本控制方面非常有用。
2.
1 root@kali:/mnt/disk/python/difflib# cat difflib_0.py
2
3 #!/usr/bin/env python
4
5 import difflib
6
7
8 text1 = ‘‘‘
9
10 I love HaiYan
11
12 I very love HaiYan
13
14 She‘s the one I love the most.
15
16 ‘‘‘
17
18 text2 = ‘‘‘
19
20 I love LiWang
21
22 I very love LiWang
23
24 I‘m his favorite person.
25
26 ‘‘‘
27
28 d = difflib.Differ()
29
30 print (list(d.compare(text1,text2)))
View Code
[‘ \n‘, ‘ I‘, ‘ ‘, ‘ l‘, ‘ o‘, ‘ v‘, ‘ e‘, ‘ ‘, ‘+ L‘, ‘- H‘, ‘- a‘, ‘ i‘, ‘- Y‘, ‘+ W‘, ‘ a‘, ‘ n‘, ‘+ g‘, ‘ \n‘, ‘ I‘, ‘ ‘, ‘ v‘, ‘ e‘, ‘ r‘, ‘ y‘, ‘ ‘, ‘ l‘, ‘ o‘, ‘ v‘, ‘ e‘, ‘ ‘, ‘+ L‘, ‘- H‘, ‘- a‘, ‘ i‘, ‘- Y‘, ‘+ W‘, ‘ a‘, ‘ n‘, ‘+ g‘, ‘ \n‘, ‘- S‘, ‘+ I‘, "+ ‘", ‘+ m‘, ‘+ ‘, ‘ h‘, ‘+ i‘, ‘- e‘, "- ‘", ‘ s‘, ‘ ‘, ‘+ f‘, ‘+ a‘, ‘+ v‘, ‘+ o‘, ‘+ r‘, ‘+ i‘, ‘ t‘, ‘- h‘, ‘ e‘, ‘ ‘, ‘+ p‘, ‘+ e‘, ‘+ r‘, ‘+ s‘, ‘ o‘, ‘ n‘, ‘- e‘, ‘- ‘, ‘- I‘, ‘- ‘, ‘- l‘, ‘- o‘, ‘- v‘, ‘- e‘, ‘- ‘, ‘- t‘, ‘- h‘, ‘- e‘, ‘- ‘, ‘- m‘, ‘- o‘, ‘- s‘, ‘- t‘, ‘ .‘, ‘ \n‘]
1 list1 = list(d.compare(text1,text2))
2
3 for line in list1:
4
5 if line == "\n":
6
7 print ("\n")
8
9 print ("%s" %(line),end=‘‘)
View Code
# python3 difflib_0.py
I l o v e + L- H- a i- Y+ W a n+ g
I v e r y l o v e + L- H- a i- Y+ W a n+ g
- S+ I+ ‘+ m+ h+ i- e- ‘ s + f+ a+ v+ o+ r+ i t- h e + p+ e+ r+ s o n- e- - I- - l- o- v- e- - t- h- e- - m- o- s- t .
1 # echo -e "I love HaiYan \nI very love HaiYan \nShe‘s the one I love the most." > test_1
2
3 # echo -e "I love LiWang \nI very love LiWang \nI‘m his favorite person" > test_2
1 # cat difflib_1.py
2
3 #!/usr/bin/env python
4
5 import difflib
6
7 def open_files(filename):
8
9 files = open(filename,‘rb‘)
10
11 text = files.read().splitlines()
12
13 files.close()
14
15 return text
16
17 d = difflib.HtmlDiff()
18
19
20 text_1 = open_files(‘test_1‘)
21
22 text_2 = open_files(‘test_2‘)
23
24 print (d.make_file(text_1,text_2))
View Code
1 # python difflib_1.py > /mnt/disk/html/index.html
1 #cat difflib_2.py
2
3 #!/usr/bin/env python
4
5 #exit argv
6
7 import sys
8
9 #path
10
11 import os
12
13 #HtmlDiff
14
15 import difflib
16
17 html_files = ‘/mnt/disk/html/index.html‘
18
19 #Determine whether the parameter exists
20
21 try:
22
23 script_name = sys.argv[0]
24
25 file1 = sys.argv[1]
26
27 file2 = sys.argv[2]
28
29 except:
30
31 print ("%s Using: %s filename1 filename 2" %(script_name,script_name))
32
33 sys.exit()
34
35 #Function 1
36
37 def dealwith_files(filename):
38
39 #open files
40
41 try:
42
43 files = open(filename,‘rb‘)
44
45 #read files
46
47 text = files.read().splitlines()
48
49 #close files
50
51 files.close()
52
53 except:
54
55 print ("Open files fail ")
56
57 sys.exit()
58
59 #return files
60
61 return text
62
63 #Determine if the files exists
64
65 if os.path.isfile(file1) and os.path.isfile(file2):
66
67 d = difflib.HtmlDiff()
68
69 try:
70
71 print_files = open(html_files,‘w‘)
72
73 print_files.write(d.make_file(dealwith_files(file1),dealwith_files(file2)))
74
75 print_files.close()
76
77 except:
78
79 print ("write %s fail" %(html_files))
80
81 # print (d.make_file(dealwith_files(file1),dealwith_files(file2)))
82
83 else:
84
85 print ("%s or %s is not such file" %(file1,file2))
86
87 sys.exit()
View Code
1 # chmod 755 difflib_2.py
2
3 # ./difflib_2.py debconf.conf debconf.conf.bak
4
5 #