Python difflib:通过将行列表与单个、大型、组合lin进行比较来创建diff

2024-05-15 03:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

假设我有一个文本段列表t1

t1 = [
    'Hello everybody, ',
    'this is by ',
    'far the best ',
    'chicken I had ',
    'in my entire ',
    'life.'
]

另一方面,我有一个组合的稍微改变的文本t2

^{pr2}$

有没有一种方法可以创建一个diff来显示每个片段的差异?因此,结果应该类似于:

  Hello everybody,
- this is by
+ this was by
  far the best
- chicken I had
+ beef I had
  in my entire
  life.

所以我需要将合并后的文本映射回单个片段。difflib(或其他第三方库)中是否有任何函数可以为我执行此操作?在

当前解决方案

目前,我通过首先组合t1来创建一个diff,然后创建一个详细的diff,它显示了行内的更改:

d = difflib.Differ()
diff = d.compare([''.join(t1)], [t2])

现在我必须评估输出,并尝试将所有内容映射回我以前使用的段。我认为这是可行的,但在我为这个解决方案投入大量精力之前,我想可能值得尝试找出,如果有一个更简单的解决方案,可能会自动进行这种重新映射。在

对感兴趣的人有点背景

一方面,我最终得到的是分段文本,另一方面是组合文本的原因是:对于每个文本段,都有时间戳(存储在不同的文件中)来定义文本在何时被说出。这对于在播放视频时突出显示文本非常重要(可以将其视为字幕)。用户现在应该能够提交对这篇文章的更正,因为我希望他们能够在整个文档中编辑,而不受限制的边界,我只需呈现组合文本。现在,当用户进行编辑时,我必须使用结果并尝试找出编辑发生在哪些片段中,然后相应地更新(或合并或删除)片段。在


Tags: the文本编辑hellobyisdiff解决方案

热门问题