• 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))
    

      

  • 相关阅读:
    Effective C++学习笔记之explicit
    腾讯面试经验2
    腾讯面试经验
    值类型和引用类型的区别,struct和class的区别
    【转载】固态硬盘的S.M.A.R.T详解
    SSD的传输总线、传输协议、传输接口
    坏块管理(Bad Block Management,BBM)
    脱离SVN的控制
    Func的介绍
    简单AOP
  • 原文地址:https://www.cnblogs.com/xiao1/p/6169910.html
Copyright © 2020-2023  润新知