私は、2つのプログラムのコマンドライン出力を比較する総合的な差分を作成しようとしています。私が持っているPython difflibの出力を理解する/使用する方法は?
from difflib import Differ
from pprint import pprint
import sys
def readable_whitespace(line):
return line.replace("\n", "\\n")
# Two strings are expected as input
def print_diff(text1, text2):
d = Differ()
text1 = text1.splitlines(True)
text2 = text2.splitlines(True)
text1 = [readable_whitespace(line) for line in text1]
text1 = [readable_whitespace(line) for line in text2]
result = list(d.compare(text1, text2))
sys.stdout.writelines(result)
sys.stdout.write("\n")
いくつかの要件を:私はdifflib
を使用して、このコードを思い付いた
- (明らかに)出力の違いにあり
- 新ラインが何であるかを明確にする必要があり私の場合は問題であり、矛盾を引き起こすときにはっきりと見える必要があるので、
\n
に置き換えられます。
私はm yの関数diff:あなたの便宜のために
A = "AAABAAA\n"
A += "BBB\n"
B = "AAAAAAA\n"
B += "\n"
B += "BBB"
print_diff(A,B)
ファイルとしてそれを実行できるように、ここでのテストは機能がマージされていますhttp://pastebin.com/BvQw9naa
私は私に言おうと、この出力が何であるか見当がつかない。
- AAAAAAA\n? ^^
+ AAAAAAA
? ^
- \n+
BBB
お知らせ最初の行にこれら2つの^
のシンボル?彼らは何を指していますか...?また、私は意図的に新しい行を1つのテスト文字列に入れます。私はdiffがそれに気づいたとは思わない。
出力を包括的にするにはまたはを理解することを学びますか?
待ち...すべての改行を置き換えてから行の最後に置くことは安全でしょうか? –
@TomášZato。それは起こっていることではありません。入力の*実際のエンドライン文字はエスケープされているため、それらを適切に比較して出力に表示することができます。改行は、表示目的のためだけに追加されます。 – ekhumoro