1

次のような 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

framesIDを共有するものの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 つのメイン フォルダーが必要です。

4

1 に答える 1