• difflib模块


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

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

    字符串比较

    import difflib
    
    nginx_config_1 = r'C:UserslongfeiDesktop
    ginx1.conf'
    nginx_config_2 = r'C: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 = r'C:UserslongfeiDesktop
    ginx1.conf'
    nginx_config_2 = r'C: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文件即可。

  • 相关阅读:
    getaddrinfo()函数详解
    nm 命令 程序符号信息查看
    C# WebRequest处理Https请求
    正则表达式
    poj2762 Going from u to v or from v to u?
    Coroutine,你究竟干了什么?
    介绍几篇很有意思的计算机科普文章
    1005 Number Sequence(HDU)
    为什么读大学时做学术比搞项目重要?
    gcc中-pthread和-lpthread的区别
  • 原文地址:https://www.cnblogs.com/dxnui119/p/13087329.html
Copyright © 2020-2023  润新知