随笔 - 139  文章 - 0 评论 - 0 阅读 - 33825
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

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

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

字符串比较

复制代码
import difflib

nginx_config_1 = r'C:\Users\longfei\Desktop\nginx1.conf'
nginx_config_2 = r'C:\Users\longfei\Desktop\nginx2.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:\Users\longfei\Desktop\nginx1.conf'
nginx_config_2 = r'C:\Users\longfei\Desktop\nginx2.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文件即可。
复制代码

posted on   longfei2021  阅读(349)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
历史上的今天:
2019-06-10 Django15-分页功能
点击右上角即可分享
微信分享提示