2018年9月22日土曜日

Python で2つの文字列の差分を見る

標準モジュールdifflib

まず、分割されたリストs1とs2の中身を比較してみます。 before.py、after.pyという名前は判別用ですが、適当につけてもよいかと。
import difflib
s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
sys.stdout.writelines(difflib.context_diff(s1, s2, fromfile='before.py', tofile='after.py'))
出力は
*** before.py
--- after.py
***************
*** 1,4 ****
! bacon
! eggs
! ham
  guido
--- 1,4 ----
! python
! eggy
! hamster
  guido
となって、どちらにもあるguidoには!がついていませんが、どちらかにしかない項目には!がついています。


テキストでdiffを見る


テキストの文字列は、文字のリストにしてから同様の操作をします。
text1 = '''  1. Beautiful is better than ugly.
2. Explicit is better than implicit.
3. Simple is better than complex.
4. Complex is better than complicated.
'''.splitlines(keepends=True)
text2 = '''  1. Beautiful is better than ugly.
3. Simple is better than complex.
4. Complicated is better than complex.
5. Flat is better than nested.
'''.splitlines(keepends=True)
という例を使います。keepends=True は改行を残すかどうかどうかで、デフォルトではFalseになっています。
*** before.py
--- after.py
***************
*** 1,4 ****
    1. Beautiful is better than ugly.
-   2. Explicit is better than implicit.
    3. Simple is better than complex.
!   4. Complex is better than complicated.
--- 1,4 ----
    1. Beautiful is better than ugly.
    3. Simple is better than complex.
!   4. Complicated is better than complex.
!   5. Flat is better than nested.
-, + という記号は1つめあるいは2つめにしかない、という結果を表しています。

0 件のコメント:

コメントを投稿