zoukankan      html  css  js  c++  java
  • python---difflib

    文件内容差异对比

    difflib为python的标准库模块,无需安装。作用时对比文本之间的差异。并且支持输出可读性比较强的HTML文档,与LInux下的diff 命令相似。在版本控制方面非常有用。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #Author: 小祎
    
    import difflib
    text1 = """ #定义字符串1
    user www www;
    worker_processes 2;
    
    error_log logs/error.log;
    #error_log logs/error.log notice;
    #error_log logs/error.log info;
    
    pid logs/nginx.pid;
    
    
    events {
    use epoll;
    worker_connections 2048;
    }
    
    
    http {
    include mime.types;
    default_type application/octet-stream;
    
    server {
    listen 80;
    server_name itoatest.example.com;
    root /apps/oaapp;
    
    charset utf-8;
    access_log logs/host.access.log main;
    
    """
    text1_lines = text1.splitlines() #以行进行分割
    
    text2 = """ #定义字符串2
    user www www;
    worker_processes 2;
    
    error_log logs/error.log;
    #error_log logs/error.log notice;
    #error_log logs/error.log info;
    
    pid logs/nginx.pid;
    
    
    events {
    use epoll;
    worker_connections 2000;
    }
    
    
    http {
    include mime.types;
    default_type application/octet-stream;
    
    server {
    listen 80;
    server_name itoatest.example.com;
    root /apps/oaapp;
    
    charset utf-8;
    access_log logs/host.access.log main;
    
    """
    text2_lines = text2.splitlines()
    
    d = difflib.Differ()#创建Differ对象
    diff = d.compare(text1_lines,text2_lines)
    print('
    '.join(list(diff)))
    
    符号 含义
    '-' 包含在第一个系列行中,但不包含第二个。
    '+' 包含在第二个系列行中,但不包含第一个。
    ' ' 两个系列行一致
    '?' 存在增量差异
    '^' 存在差异字符

    生成对比HTML格式 文档

      使用HtmlDiff()类的make_file()方法生成HTML文档

    #对上面代码修改
    
    # d = difflib.Differ()#创建Differ对象
    # diff = d.compare(text1_lines,text2_lines)
    # print('
    '.join(list(diff)))
    
    
    
    d = difflib.HtmlDiff()
    print(d.make_file(text1_lines,text2_lines))
    

     python xxx.py > diff.html

    对比Nginx配置文件差异脚本

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    #Author: guhf
    
    import difflib
    import string
    import sys
    
    try:
        textfile1 = sys.argv[1]
        textfile2 = sys.argv[2]
    except Exception:
        print("Error:" + str(e))
        print("Usage: xxxx.py filename1 filename2")
        sys.exit()
    def readfile(filename):
        try:
            fileHandle = open(filename,'r')
            text = fileHandle.read().splitlines()
            fileHandle.close()
            return text
        except IOError as error:
            print('Read file Error:' + str(error))
            sys.exit()
    
    if textfile1 == "" or textfile2 == "":
        print("Usage:test.py filename1 filename2")
        sys.exit()
    
    text1_lines = readfile(textfile1)
    text2_lines = readfile(textfile2)
    
    d = difflib.HtmlDiff()
    print(d.make_file(text1_lines,text2_lines))
    

      

  • 相关阅读:
    要改变静态文本框的值,必须设置静态文本框控件的样式中(Notify通知)勾选
    MFC对话框中的编辑控件的7种操作方式
    孙鑫C++视频教程 rmvb格式 全20CD完整版
    Windows server2008 下 PowerShell对.NET3.5静默安装
    MFC关机函数
    PDI-KETTLE-2:KETTLE安装,环境变量配置,开发准备
    KETTLE常见问题记录第一篇【安装,资源库,数据库】
    日常问题解决记录一:远程桌面进程如果关闭了怎么呼出?
    KETTLE调度第二篇:把Jenkins调度Web启动设置为后台执行
    PDI-KETTLE-1:使用KETTLE如何设计一个作业-以数据库迁移为例
  • 原文地址:https://www.cnblogs.com/xiao1/p/6169910.html
Copyright © 2011-2022 走看看