python比较两个文件的差异

使用python脚本比较两个文件的差异内容并输出到html文档中,可以通过浏览器打开查看。

一、脚本使用

  1. 对比nginx配置文件的差异

python python_diff_file.py -f1 web26.conf -f2 web103.conf

二、脚本内容

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
1.difflib的HtmlDiff类创建html表格用来展示文件差异,通过make_file方法
2.make_file方法使用
make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])
用来生成一个包含表格的html文件,其内容是用来展示差异。
fromlines和tolines,用于比较的内容,格式为字符串组成的列表
fromdesc和todesc,可选参数,对应的fromlines,tolines的差异化文件的标题,默认为空字符串
context 和 numlines,可选参数,context 为True时,只显示差异的上下文,为false,显示全文,numlines默认为5,
当context为True时,控制展示上下文的行数,当context为false时,控制不同差异的高亮之间移动时“next”的开始位置
3.使用argparse传入两个需要对比的文件
"""
import difflib
import argparse
import sys

# 创建打开文件函数,并按换行符分割内容
def readfile(filename):
    try:
        with open(filename, ‘r‘) as fileHandle:
            text = fileHandle.read().splitlines()
        return text
    except IOError as e:
        print("Read file Error:", e)
        sys.exit()

# 比较两个文件并输出到html文件中
def diff_file(filename1, filename2):
    text1_lines = readfile(filename1)
    text2_lines = readfile(filename2)
    d = difflib.HtmlDiff()
    # context=True时只显示差异的上下文,默认显示5行,由numlines参数控制,context=False显示全文,差异部分颜色高亮,默认为显示全文
    result = d.make_file(text1_lines, text2_lines, filename1, filename2, context=True)
    # 内容保存到result.html文件中
    with open(‘result.html‘, ‘w‘) as resultfile:
        resultfile.write(result)
    # print(result)

if __name__ == ‘__main__‘:
    # 定义必须传入两个参数,使用格式-f1 filename1 -f2 filename
    parser = argparse.ArgumentParser(description="传入两个文件参数")
    parser.add_argument(‘-f1‘, action=‘store‘, dest=‘filename1‘, required=True)
    parser.add_argument(‘-f2‘, action=‘store‘, dest=‘filename2‘, required=True)
    given_args = parser.parse_args()
    filename1 = given_args.filename1
    filename2 = given_args.filename2
    diff_file(filename1, filename2)

三、对比结果

时间: 2024-10-14 06:38:03

python比较两个文件的差异的相关文章

diff 比较两个文件的差异

功能:比较两个文件的差异,并把不同地方的信息显示出来.默认diff格式的信息. diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的补丁文件.也使用patch命令对相应的文件打补丁.differential [?d?f??ren??l] 语法:diff    [options]   FILESFILES的格式: FILE1 FILE2 :源是一个文件,目标也是文件.这两个文件必须是文本文件.以逐行的方式,比较文本文件的异同处.DIR1 DIR2   :源是一个

Python自动化运维——文件内容差异对比

Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:difflib 安装:Python版本大于等于2.3系统自带 功能:对比文本之间的差异,而且支持输出可读性比较强的HTML文档,与Linux中的diff命令比较相似. 两个字符串的差异对比: #import difflib #text1=''' #hello world. #how are you. #nice to meet you. #''' #text1_lines=text1.splitlines

用python比较两个文件中内容的不同之处, 并输出行号和内容.

代码部分: '''cmpfile.py - 比对两个文件, 如果有不同之处, 打印内容和行号''' import os class cmpFile: def __init__(self, file1, file2): self.file1 = file1 self.file2 = file2 def fileExists(self): if os.path.exists(self.file1) and os.path.exists(self.file2): return True else: r

linux对比两个文件的差异

在项目维护阶段,经常会对垃圾文件进行清理.比如没有在数据库中的文件进行删除,这个时候最好的选择就是使用shell命令了:废话不多说直接上代码: 1.首先准备好从数据表导出来的数据,方法随意 2.在服务器查看指定目录下所有文件的文件名,并生成文件. ls *.* >***.txt 3.对比两个文件的文件内容不同的部分,并且删除 #!/bin/sh #BEGIN cat test1.txt | sort | uniq | sort > a_u.txt cat test2.txt | sort |

两个文件内容差异对比,

比较两个单行文件的方法就我知道的而言有4种 用diff 用grep 用comm 用uniq [[email protected] ~]# echo "`seq 5`" >file1;cat file1 1 2 3 4 5 [[email protected] ~]# echo "`seq 2 7`" >file2;cat file2 2 3 4 5 6 7 1.用diff -c file1多的是"-"file2多的是"+&q

利用python合并两个文件

1格式如下 在做利用zabbix的api来批量添加主机的时候,需要处理ip和hostname,在借用别人写的py程序的基础上,自己有改装了以下脚本,为自己使用.需要时ip和hostname为一个统一格式. $ cat ip.txt 1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4 $ cat hostname.txt tx-1 tx-2 tx-3 tx-4 最后需要合并为如下格式 1 tx-1,1.1.1.1 2 tx-2,2.2.2.2 3 tx-3,3.3.3.3 4 tx-4

使用python实现两个文件夹里文件的对比(包含内容的对比)

#-*-coding:utf-8-*- #=============================================================================== # 目录对比工具(包含子目录 ),并列出# 1.A比B多了哪些文件 # 2.B比A多了哪些文件 # 3.二者相同的文件:文件大小相同 VS 文件大小不同 (Size相同文件不打印:与Size不同文件显示未排序)#===========================================

python对比两个文件问题

写一个比较两个文本文件的程序. 如果不同, 给出第一个不同处的行号和 列号. 比较的时候可以使用zip()函数 1 a=open('test.txt','r') 2 b=open('test2.txt','r') 3 row=0 4 for linea,lineb in zip(a,b): 5 row+=1 6 if not linea==lineb: 7 col=0 8 for chara,charb in zip(linea,lineb): 9 col+=1 10 if not chara=

Python获取两个文件的交集、并集、差集

题记:朋友在处理数据时,需要解决这方面的问题,所以利用她给的代码,自己重新梳理了下,并成功运行. 代码如下: # coding:utf-8 s1 = set(open(r'C:\\Users\\yangwj\\Desktop\\2\\1.txt').readlines()) s2 = set(open(r'C:\\Users\\yangwj\\Desktop\\2\\2.txt').readlines()) ff = open('C:\\Users\\yangwj\\Desktop\\2\\12