【发布时间】:2013-06-04 00:25:03
【问题描述】:
我有两个看起来像这样的文件,它们之间存在一些差异:
第一个文件:
{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 但不相同的 ids 所以我需要为每个差异写入两个不同的文件,可能写入一个文件夹。因此,如果这两个文件有 20 个不同之处,我需要为每个原始文件创建两个主文件夹,每个原始文件包含相同 ID 的每个开始和结束 frame 的文本文件。
【问题讨论】: