欢迎访问宙启技术站
智能推送

使用Pythondifflib模块的unified_diff()函数生成两个文本文件的差异

发布时间:2024-01-05 00:31:49

diff模块是Python标准库中的模块,用来计算两个字符串或文件之间的差异。

diff模块中的unified_diff()函数用于生成两个文本文件的差异带。差异带显示了两个文件之间的差异,并以一种友好的格式显示这些差异。

下面是一个使用unified_diff()函数生成差异带的示例:

import difflib

# 原始文本文件
file1 = '''Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.'''

# 修改后的文本文件
file2 = '''Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris,
sunt in culpa qui officia deserunt mollit anim id est laborum.'''

# 将文本文件转换成列表以便比较
lines1 = file1.splitlines()
lines2 = file2.splitlines()

# 计算差异
diff = difflib.unified_diff(lines1, lines2, fromfile='file1.txt', tofile='file2.txt', lineterm='')

# 打印差异带
for line in diff:
    print(line)

输出结果如下:

--- file1.txt
+++ file2.txt
@@ -4,4 +4,5 @@
 Ut enim ad minim veniam,
-quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+quis nostrud exercitation ullamco laboris,
+sunt in culpa qui officia deserunt mollit anim id est laborum.

输出结果中的每一行都以-+@开头。-表示在原始文件中删除的行,+表示在修改后的文件中新增的行,@表示差异块的标记。

在这个例子中,可以看到修改后的文件中在原始文件的第5行新增了一行内容。

unified_diff()函数还有其他可选参数,可以进一步定制输出结果。例如,可以使用n参数来指定差异带中每个差异块应包含的上下文行数,默认为3。也可以使用其他特定的标志来指定差异块的标记符号。

总之,diff模块中的unified_diff()函数提供了一种方便的方式来生成两个文本文件的差异带,并且可以根据需要进行调整和定制。