Python之difflb模块及sys模块

Python之difflb模块

  • 什么是difflb模块

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

  • 符号理解
符号    含义
'-'     包含在第一个系列行中,但不包含第二个。
'+'     包含在第二个系列行中,但不包含第一个。
' '     两个系列行一致
'?'     存在增量差异
'^'     存在差异字符
  • difflb模块的示例

比较两个文件内容的不同:

import difflib

text1 = '''  1. Beautiful is better than ugly.
       2. Explicit is better than implicit.
       3. Simple is better than complex.
       4. Complex is better than complicated.
		'''.splitlines(keepends=False)
print(text1)

text2 = '''  1. Beautiful is better than ugly.
       3.   Simple is better than complex.
       4. Complicated is better than complex.
       5. Flat is better than nested.
     '''.splitlines(keepends=True)

print(text2)
#splitlines()按照行分割
#返回一个包含各行作为元素的列表
#参数:
#keepends=True 保留换行符
#keepends=False 不包含换行符

实现linux里面类似diff命令的功能:

d = difflib.Differ()
print(''.join(list(d.compare(text1,text2))))

用with上下文管理器自动在当前目录下生成前端html文件(可在网页查看):

d = difflib.HtmlDiff()
htmlContent = d.make_file(text1,text2)
print(htmlContent)
with open('diff.html','w') as f:
    f.write(htmlContent)
  • linux文件的之间的对比
import difflib

filename1 = '/tmp/passwd'
filename2 = '/tmp/passwd1'
with open(filename1) as f1,open(filename2) as f2:
    content1 = f1.read().splitlines(keepends=True)
    content2 = f2.read().splitlines(keepends=True)
d = difflib.HtmlDiff()
htmlContent = d.make_file(content1,content2)
with open('passwdDiff.html','w') as f:
    f.write(htmlContent)
  • 什么是sys模块

sys模块:全称system,指的是解释器(os指的是操作系统)
常用操作,用于接收系统操作系统调用解释器传入的参数

  • sys模块的示例
import os
import sys
print(sys.argv)
# 获取脚本名称 sys.argv[0]
# print(sys.argv[0])
# 获取脚步传递的第一个参数:
# print(sys.argv[1])
# 获取脚本传递的第二个参数
# print(sys.argv[2])

print(sys.version[:3])

# 作用:根据python版本编写符合不同版本的程序 使程序可兼容
if sys.version[0] == '2':
    print('running in python2...')
elif sys.version[0] == '3':
    print('running in python3...')

# 返回模块的搜索路径,初始化使用PYTHONPATH环境变量
print(sys.path)
# 可以实现跨平台
print(sys.platform)
if sys.platform == 'linux':
    os.system('ifconfig')
else:
    os.system('ipconfig')
  • difflb模块与sys模块的结合示例

需求:运行脚本并指定所对比文件的名称
如:

/usr/local/python3/bin/python3 mydiff.py file1 file2
import difflib
import sys

if len(sys.argv) !=3:
    print(
        """
        Usage: %s 比较的文件1 比较的文件2
        """%(sys.argv[0])
    )

else:
    filename1 = sys.argv[1]
    filename2 = sys.argv[2]
    try:
        with open(filename1) as f1,open(filename2) as f2:
            content1 = f1.read().splitlines(keepends=True)
            content2 = f2.read().splitlines(keepends=True)
    except Exception as e:
        print('比较错误,错误的原因',e)
    d = difflib.HtmlDiff()
    htmlContent = d.make_file(content1,content2)
    with open('different.html','w') as f:
        f.write(htmlContent)
  • END

猜你喜欢

转载自blog.csdn.net/weixin_44828950/article/details/91470211