是否可以使用python恢复给定统一差异和原始文本的文本

问题描述 投票:0回答:2

我想要的是计算两个文本(原始文本和新文本)的差异增量,存储原始文本的增量,然后期望恢复新文本。这样我就可以用最小的空间存储一篇文本的不同版本。

使用Python的difflib,这可以通过ndiff和restore来完成;然而 ndiff 的 delta 包含了新文本的所有内容,这与我的意图不一致。

unified_diff 通过仅显示差异提供了更紧凑的增量,这是可取的,但我找不到一种方法来恢复新文本及其增量和原始文本。

我读过一些讨论,例如thisone,其中说来自unified_diff的增量可以单独用于恢复任一文本,但我不确定为什么不使用原始文本。

python diff restore
2个回答
3
投票

我发现了 google-diff-match-patch 它正是我想要的。


0
投票

看起来我最近正在制作非常类似的项目,用于在数据库中存储(和恢复)压缩的统一差异。

实际上统一差异是一种非常简单的格式,因此很容易实现它的恢复,如下所示:

Python

def restore(diff: list[str]) -> tuple[list[str], list[str]]:
    file1, file2 = [], []
    for line in diff[3:]: # skip metadata
        op, data = line[0], line[1:] # treat 1st symbol as diff operation
        if op in [' ', '-']:
            file1.append(data)
        if op in [' ', '+']:
            file2.append(data)
    return file1, file2
© www.soinside.com 2019 - 2024. All rights reserved.