栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

比较两个文件在python中报告差异

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

比较两个文件在python中报告差异

import diffliblines1 = '''dogcatbirdbuffalogophershoundhorse'''.strip().splitlines()lines2 = '''catdogbirdbuffalogopherhorsemouse'''.strip().splitlines()# Changes:# swapped positions of cat and dog# changed gophers to gopher# removed hound# added mousefor line in difflib.unified_diff(lines1, lines2, fromfile='file1', tofile='file2', lineterm=''):    print line

输出以下内容:

--- file1+++ file2@@ -1,7 +1,7 @@+cat dog-cat bird buffalo-gophers-hound+gopher horse+mouse

此差异为您提供了上下文-周围的线条以帮助您清楚文件的不同之处。您可以在此处看到两次“ cat”,因为它已从“ dog”下方删除,并在其上方添加。

您可以使用n = 0删除上下文。

for line in difflib.unified_diff(lines1, lines2, fromfile='file1', tofile='file2', lineterm='', n=0):    print line

输出:

--- file1+++ file2@@ -0,0 +1 @@+cat@@ -2 +2,0 @@-cat@@ -5,2 +5 @@-gophers-hound+gopher@@ -7,0 +7 @@+mouse

但是现在它充满了“ @@”行,告诉您文件中已更改的位置。让我们删除多余的行以使其更具可读性。

for line in difflib.unified_diff(lines1, lines2, fromfile='file1', tofile='file2', lineterm='', n=0):    for prefix in ('---', '+++', '@@'):        if line.startswith(prefix): break    else:        print line

提供以下输出:

+cat-cat-gophers-hound+gopher+mouse

现在,您要它做什么?如果您忽略所有已删除的行,则不会看到“猎犬”已被删除。如果您很高兴只显示文件中的添加内容,则可以执行以下操作:

diff = difflib.unified_diff(lines1, lines2, fromfile='file1', tofile='file2', lineterm='', n=0)lines = list(diff)[2:]added = [line[1:] for line in lines if line[0] == '+']removed = [line[1:] for line in lines if line[0] == '-']print 'additions:'for line in added:    print lineprintprint 'additions, ignoring position'for line in added:    if line not in removed:        print line

输出:

additions:catgophermouseadditions, ignoring position:gophermouse

您现在可能已经知道,有两种方法可以“打印”两个文件的差异,因此,如果需要更多帮助,则需要非常具体。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646270.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号