ファイルの差分をとる(コマンドライン版)
vimdiffなんかと同じ機能のものを作るのは難しそうだが、ファイルを行ごとに比較して一方のファイルにしか存在しない行だけを抜き出すくらいだとすぐにできそうだ。スクリプトpydiff.pyを作った。
pydiff.pyは以下の通り。
#!/bin/env python import sys FILE1 = sys.argv[1] FILE2 = sys.argv[2] L1 = open(FILE1, 'r').readlines() L2 = open(FILE2, 'r').readlines() for i in xrange(len(L1)): findFlag = 0 for j in xrange(len(L2)): if L2[j] == L1[i]: findFlag = 1 if not findFlag: print FILE1,":l",i,"> ",L1[i][:-1] for i in xrange(len(L2)): findFlag = 0 for j in xrange(len(L1)): if L1[j] == L2[i]: findFlag = 1 if not findFlag: print FILE2,":l",i,"> ",L2[i][:-1]
テストデータとして、次のようなテキストデータa.txtとb.txtを使う。
a.txt
12345 abcde ABCDE 67890
b.txt
54321 abcdf abcde 67809
実行結果はこの通り。Windowsだと、大文字と小文字を区別しないから結果が異なる可能性はあるかもしれない。
% python pydiff.py a.txt b.txt a.txt :l 1 > 12345 a.txt :l 3 > ABCDE a.txt :l 4 > 67890 b.txt :l 1 > 54321 b.txt :l 2 > abcdf b.txt :l 4 > 67809