difflib模块

Posted dxnui119

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了difflib模块相关的知识,希望对你有一定的参考价值。

difflib可比对文本之间的差异,支持输出为html文档,与Linux下的diff命令相似。
可以使用该模块比对代码和配置文件的差异,在版本控制方面非常有用。

  • ‘-‘:包含在第一个序列行中,不包含在第二个序列行中
  • ‘+‘:包含在第二个序列行中,不包含在第一个序列行中
  • ‘‘:两个序列行一致
  • ‘?‘:标志两个序列行存在增量差异
  • ‘^‘:标志出两个序列存在的差异字符

字符串比较

import difflib

nginx_config_1 = rC:UserslongfeiDesktop
ginx1.conf
nginx_config_2 = rC:UserslongfeiDesktop
ginx2.conf

with open(nginx_config_1 ,encoding=utf-8) as f:
    f1 = f.readlines()

with open(nginx_config_2,encoding=utf-8) as f:
    f2 = f.readlines()

d = difflib.Differ()
diff = d.compare(f1, f2)
print(diff)
# <generator object Differ.compare at 0x000001B948760408>

for line in diff:
    print(line)

结果如下:

技术图片
  user  nginx;
  worker_processes  1;

  error_log  /var/log/nginx/error.log warn;
  pid        /var/run/nginx.pid;

  events {
      worker_connections  1024;
  }

  http {
      include       /etc/nginx/mime.types;
      default_type  application/octet-stream;
      #反向代理的日志配置
      log_format  main  $remote_addr - $remote_user [$time_local] "$request" 
                        $status $body_bytes_sent "$http_referer" 
                        "$http_user_agent" "$http_x_forwarded_for";

      access_log  /var/log/nginx/access.log  main;

      sendfile        on;
      #tcp_nopush     on;

      keepalive_timeout  65;
- 
      #gzip  on;
- 
      include /etc/nginx/conf.d/*.conf;
  
      upstream http-server {
          server 192.168.76.134:80;
-         server 192.168.76.135:80;
?                             ^
+         server 192.168.76.136:80;
?                             ^
                     }
+ 
+     upstream tomcats {
+         server 192.168.0.100:8080 weight=2;  # 2/6次
+         server 192.168.0.101:8080 weight=3;  # 3/6次
+         server 192.168.0.102:8080 weight=1;  # 1/6次
+     }
  
      server {
          listen 80;
          location / {proxy_pass http://http-server; #名称和upstream后的名称一致}
             }
+ 
+     server {
+         listen 8080;
+         location / {proxy_pass http://tomcats;}
+            }
  }
View Code

 

生成HTML文档

采用HtmlDiff()的make_file()方法可以生成HTML文档

import difflib

nginx_config_1 = rC:UserslongfeiDesktop
ginx1.conf
nginx_config_2 = rC:UserslongfeiDesktop
ginx2.conf

with open(nginx_config_1 ,encoding=utf-8) as f:
    f1 = f.readlines()

with open(nginx_config_2,encoding=utf-8) as f:
    f2 = f.readlines()

d = difflib.HtmlDiff()
diff = d.make_file(f1,f2)  
#diff生成了一个html页面的代码,将代码保存为html文件中,或者在运行python文件时将结果保存为diff.html(运行python my_diff.py > diff.html),用浏览器打开保存的html文件即可。

技术图片

以上是关于difflib模块的主要内容,如果未能解决你的问题,请参考以下文章

Python一起来找茬—difflib模块

二业务服务监控

python中difflib内置模块之文本对比

python difflib.md

python difflib模块实现两个文件差异对比,并输出html格式。

Python使用difflib模块比较两个文件内容异同,同时输出html易浏览