我有兩個文件看起來像這樣與他們之間的一些差異:如果存在差異,則獲取具有相同ID的項目的最小最大值?
第一個文件:
{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]]}
第二個文件:
{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兩者並打印出在它們之間有差異的線條。 我想要做的是打印共享相同的id
的最小值和最大值frame
值。
該框架是每一行中的關鍵,因此這種情況下的框架範圍從16
到26
。 id是每個4值列表前面的值。所以第一行的id是3
。第二行有兩個ID,分別是2
,然後是3
。
所以想什麼,我寫出來的一個例子是:
17 - 36
因爲共享ID 3
的frames
的一個比我與比較文件不同。
對於每一個這樣的差異,我需要寫出一個新的文件,只包含開始幀和結束幀,然後我會連接到每個文件的附加字符串。
這是當前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
ammount但不是相同的id
s,所以我需要爲每個差異編寫兩個不同的文件,可能到一個文件夾。所以如果這兩個文件有20個不同,我需要爲每個原始文件分別創建兩個主文件夾,每個文件夾包含相同ID的每個開始和結束frame
的文本文件。
這是非常有幫助非常感謝你!但是,我不明白s的第三行是什麼。split('\ n'): – MaxPower
哦,是的,抱歉:-)'s'只是包含您在開頭顯示的所有行的大字符串,它代表了差異列表。 – Emmanuel
我的編輯顯示了一個完整的解決方案,希望它是你所需要的... – Emmanuel