比较两个文本文件中的值

时间:2013-06-15 12:52:13

标签: python python-2.7

我试图以特定方式比较两个文本文件。每个文件都包含数千行,如下所示:

(29, '2 [484, 41, 69, 72]')

其中29frame2ID[]内的四个值是rectX,Y,W,H。在这种情况下,X = 484, Y = 41, W = 69, H = 72

每个frame都可以附加多个rects。从1到20或有时甚至更多。

以下是我需要比较的两个文件的示例:

档案A:

http://pastebin.com/qGLvxU1f

档案B:

http://pastebin.com/1aKw6iuH

现在对于比较方法,我需要使用以下等式比较每个rects上的所有frame

(overlap)/(two rects area - overlap) > Threshold

阈值手动定义为0.8左右。

在我确定其中frames包含rects的哪两个文件不同之后,我需要写入start frame和{{1}的第3个文件每个ID(使用上面提到的等式)产生了显着的差异。

我试图逐行比较:

end frame

但这仅确定某条线是否有差异,并且不会比较每条 def _compare(self, data1, data2): diff = [] for frame in data1.keys(): if frame in data2.keys(): data1.pop(frame) data2.pop(frame) return diff with open(out_file, 'w') as f: f.write('\n'.join(diff)) 的实际值。

1 个答案:

答案 0 :(得分:1)

我认为您应该从这些矩形创建一个类,因此您可以将(x,y)值存储为offset,将(w,h)存储为size。然后你应该为这些类添加函数,例如:toplef,topright,bottomlef,bottomright,它们会计算你需要的值。

例如:

    class rectangle:
def __init__(self,pos,size):
    self.pos=pos
    self.size=size
def topLeft(self):
    return self.pos
def topRight(self):
    return (self.pos[0]+self.size[0],self.pos[1])
def bottomLeft(self):
    return (self.pos[0],self.pos[1]+self.size[1])
def bottomRight(self):
    return (self.pos[0]+self.size[0],self.pos[1]+self.size[1])
def ares(self):
    return self.size[0]*self.size[1]

计算重叠区域比我第一次尝试更棘手,但我找到了一个解决方案,可以相对容易地实现(但现在我没有时间实现它)。主要的想法是,你确定了第三个矩形,它包含两个矩形(很容易,你只需要找到最小的左上角和最大的右下角坐标)。然后你必须计算剩下的矩形的ara。然后添加四个剩余矩形的区域,两个初始矩形,如果您减去大矩形的区域,您将得到重叠区域。我知道这听起来很复杂,但这是一个普遍的解决方案。

enter image description here