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