4

したがって、Python のdifflibを使用して、2 つの文字列の diff を生成できます。

foo = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n Nullam sed orci lobortis lectus bibendum vehicula.\n Integer iaculis eros porttitor velit porttitor scelerisque.\n Nunc venenatis nibh.'.splitlines()
bar = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n Mauris placerat, odio ut viverra gravida, elit leo tincidunt nisi, a pellentesque velit arcu id magna.\n Integer iaculis eros porttitor velit porttitor scelerisque.\n Nunc venenatis nibh.'.splitlines()

diff = difflib.unified_diff(foo, bar, lineterm='')

必要に応じて、差分をチェックアウトできます。

>>> print '\n'.join(diff)
--- 
+++ 
@@ -1,4 +1,4 @@
 Lorem ipsum dolor sit amet, consectetur adipiscing elit.
- Nullam sed orci lobortis lectus bibendum vehicula.
+ Mauris placerat, odio ut viverra gravida, elit leo tincidunt nisi, a pellentesque velit arcu id magna.
  Integer iaculis eros porttitor velit porttitor scelerisque.
  Nunc venenatis nibh.

そして、ここで私は立ち往生しています。fooその diff を string に適用して stringになるにはどうすればよいbarですか?

4

1 に答える 1

2

ndiff を使用すると、restore を使用して元の文字列を復元できます。

>>> diff = difflib.ndiff(foo, bar)
>>> diff = list(diff)
>>> print ''.join(difflib.restore(diff, 2))
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sed orci lobortis lectus bibendum baculo mihi. Integer iaculis eros porttitor velit porttitor scelerisque. Nunc venenatis nibh.
>>> ''.join(difflib.restore(diff, 2))==''.join(bar)
True
>>> ''.join(difflib.restore(diff, 1))==''.join(foo)
True
>>> 

統一された差分は通常、最初から等しい行を削除するため、元の文字列に復元することはほとんど不可能であることに注意してください。ndiff はすべてを表示するので、オリジナルを復元するのは簡単です。

于 2012-04-05T18:02:21.417 に答える