首页 > 解决方案 > 如何使用 Python Difflib 仅输出文件之间的新增内容?

问题描述

我正在使用 Difflib 比较两个文本文件,如下所示:

import difflib

new_file = open(file_name, "r")
old_file = open(old_file_name, "r")

file_difference = difflib.ndiff(old_file.readlines(), new_file.readlines())

我的目标是只输出添加。我不想知道对现有线路的更改。但是,我遇到了一个问题,所有更改/添加都标有“+”,所有减法都标有“-”。我做了很多搜索,似乎无法区分一条已更改的线路和一条全新的线路。我对如何进行感到困惑。

标签: pythondifflib

解决方案


我的一个好朋友提供了一个代码片段来回答我的问题:

# Open the files for comparison
with open(file_name, "r") as new_file:
    with open(old_file_name, "r") as old_file:
        # Find the differences between the two files
        file_difference = difflib.ndiff(old_file.readlines(), new_file.readlines())

new_lines = []
file_difference = tuple(x for x in file_difference)

idx = 0
fdiff_size = len(file_difference)
while idx < fdiff_size:
    line = file_difference[idx]
    if line.startswith("- "):
        if idx + 1 < fdiff_size and file_difference[idx + 1].startswith("? "):
            # this chunk is a change, so ignore this and the next 3 lines
            idx += 4
            continue
    elif line.startswith("+ "):
        new_lines.append(line)

    # always iterate after new item or no change
    idx += 1

推荐阅读