次のような 2 つのファイルがありますが、いくつかの違いがあります。
最初のファイル:
{16:[3, [-7, 87, 20, 32]]}
{17:[2, [-3, 88, 16, 28], 3, [-6, 84, 20, 32]]}
{18:[2, [-1, 88, 16, 28], 3, [-3, 84, 20, 32]]}
{19:[2, [1, 89, 16, 28], 3, [-2, 85, 20, 32]]}
{20:[2, [9, 94, 16, 28], 3, [1, 85, 20, 32]]}
{21:[2, [12, 96, 16, 28], 3, [2, 76, 19, 31]]}
{22:[2, [15, 97, 16, 28], 3, [4, 73, 19, 29]]}
{23:[2, [18, 96, 16, 28], 3, [6, 71, 19, 29], 10, [-10, 60, 51, 82]]}
{24:[2, [22, 97, 16, 28], 3, [9, 71, 19, 27], 10, [-5, 63, 49, 78]]}
{25:[2, [25, 99, 16, 28], 3, [13, 71, 17, 26], 10, [-1, 64, 46, 77]]}
{26:[2, [29, 101, 16, 28], 3, [17, 70, 16, 25], 10, [-1, 65, 45, 77]]}
2 番目のファイル:
{16:[3, [-7, 86, 20, 32]]}
{17:[2, [-3, 82, 16, 28], 3, [-6, 84, 20, 32]]}
{18:[2, [-1, 88, 16, 27], 3, [-3, 84, 20, 32]]}
{19:[2, [1, 89, 16, 28], 3, [-2, 84, 20, 32]]}
{20:[2, [9, 94, 15, 28], 3, [1, 85, 20, 32]]}
{21:[2, [12, 96, 16, 28], 3, [1, 76, 19, 31]]}
{22:[2, [15, 97, 17, 28], 3, [4, 73, 19, 29]]}
{23:[2, [18, 96, 18, 28], 3, [6, 71, 19, 29], 10, [-10, 60, 51, 82]]}
{24:[2, [22, 97, 16, 28], 3, [9, 71, 20, 27], 10, [-5, 63, 49, 78]]}
{25:[2, [25, 99, 16, 28], 3, [13, 71, 17, 26], 10, [-1, 64, 46, 77]]}
{26:[2, [29, 101, 17, 28], 3, [17, 70, 16, 25], 10, [-1, 65, 45, 77]]}
difflib を使用して両方を比較し、それらに違いがある行を出力します。私がやろうとしているのはframe
、同じを共有する最小値と最大値を出力することid
です。
フレームはすべての行のキーであるため、この場合のフレームの範囲は から16
まで26
です。id は、4 つの値のすべてのリストの前にある値です。したがって、最初の行の id は3
. 2 行目には と の 2 つの ID が2
あり3
ます。
だから私が書きたいものの例は次のとおりです:
17 - 36
frames
IDを共有するものの1つが、3
比較しているファイルとは異なる場合。
そのような違いごとに、開始フレームと終了フレームのみを含む新しいファイルを書き出す必要があります。次に、各ファイルに追加の文字列を連結する作業を行います。
これは、異なる各行を出力する現在の difflib の使用法です。
def compare(f1, f2):
with open(f1+'.txt', 'r') as fin1, open(f2+'.txt', 'r') as fin2:
diff = difflib.ndiff(fin1.readlines(), fin2.readlines())
outcome = ''.join(x[2:] for x in diff if x.startswith('- '))
print outcome
この実行ブロックを微調整して、上記で説明したことをどのように達成できるでしょうか?
両方のファイルが同じframe
金額を共有していますが、同じではないことに注意してください。そのid
ため、おそらくフォルダーに、違いごとに2つの異なるファイルを書き込む必要があります。frame
したがって、2 つのファイルに 20 の違いがある場合、元のファイルごとに 1 つずつ、同じ ID の開始と終了ごとにテキスト ファイルを含む 2 つのメイン フォルダーが必要です。