用Python从txt文件加载矩形数据?

我有一个矩形数据与txt文件中的图像相关联。
每一行是用于差异图像。
第一列是图像编号。
用Python从txt文件加载矩形数据?

8 17 30 70 80 

9 49 25 72 83

10 13 21 75 82 74 25 16 21

每一行都是由下式表示的矩形:与图像相关联
img_number lefttopcorner.Xcoord lefttopcorner.Ycoord width height

这些数据是空格分开的。 第三行显示此图像有两个矩形,但可能有很多。

同一行上的矩形是用制表符分隔的。
所以在同一条线上两个矩形的书面例子是这样的: img_num<space>lefttopcorner.X<space>lefttopcorner.Y<space>width<space>height<tab>...
我怎么会这些矩形加载到蟒蛇瓦尔,把他们在一些收集结构。
也许有像元组的平行数组或rectangles?上午寻找最简单的实施。

回答:

最简单的实施将与行号的dictionary关键和[[x,y,w,h]]成为该键的值,在与制表符分隔同一行的多个矩形的情况下,你会得到作为[[x1,y1,w1,h1], [x2,y2,w2,h2]]关键。

rectangles = {} 

with open("sample.txt", "r") as rects:

for rect in rects:

rectangles[int(rect.split()[0])] = [map(int, rect.split()[1:][i:i+4]) for i in range(0, len(rect.split()[1:]), 4)]

print rectangles

输出:

{8: [[17, 30, 70, 80]], 9: [[49, 25, 72, 83]], 10: [[13, 21, 75, 82], [74, 25, 16, 21]]} 

为了取回rectangles字典中的相关数据,你可以使用:

row_number = 8 

for rect in rectangles[8]: #Accessing a specific row

print rect, #Will print multiple rectangles if present.

或者检索所有的数据:

for key in rectangles: 

print rectangles[key]

回答:

我总是首先想到我的数据模型。在这里你可能有一个字典,其中图像数字为关键字,矩形列表为值。每个矩形可以是一个Rectangle对象(供您实现)。

您也可以在块分割你的解析,开始与各行的工作:

image_number, rects = line[0], line[1:] 

然后分析你rects,在另一个功能更好,得到rects作为参数,通过4提取值4,给他们到您的Rectangle对象的构造函数。最后你的矩形对象必须以正确的顺序将4个值放入4个命名成员中。

是的,你必须实现Rectangle及其ctor。你可以选择使用4个整数的元组而不是一个Rectangle类,这取决于你。

存储器的另一种想法可能是拥有一个Image类,在其构造函数中使用rects并保存矩形列表。所以你的字典存储image_number作为键和图像作为价值。

这样,您可以实现Image.draw(),可以访问self.rectangles。

回答:

with read("<filename>.txt", "r"): 

content = f.read() # may need to do something smarter is the file is big; this reads everything in memory

content = content.replace("\t", "\n")

lines = content.split("\n")

for line in lines:

rect = map(int, line.split())

回答:

我会去与元组列表字典。

images = { 

8 : [(17, 30, 70, 80)],

9 : [(49, 25, 72, 83)],

10 : [(13, 21, 75, 82), (74, 25, 16, 21)]

}

print "Image 9 => Width={} Height={}\n".format(images[9][0][2], images[9][0][3])

回答:

with open('path/to/file') as infile: 

for line in infile:

data = [int(i) for i in line.split()]

if len(data) == 5:

imageNum = data[0]

data.pop(0)

x,y, width,height = data

print("Rectangle", imageNum, "starts at coordinates (", x,y, ") and has width", width, "and has height", height)

回答:

class Rectangle和使用dictionary为包含如下它。

class Rectangle: 

def __init__(self, number, x, y, width, height):

self.img_number = number

self.x = x

self.y = y

self.width = width

self.height = height

def __str__(self):

return "IMG_NUMBER {0}; lefttopcorner.X {1}; lefttopcorner.Y {2}; width {3}; height {4}".format(self.img_number,

self.x, self.y,

self.width, self.y)

rectangles = {}

with open("1.txt") as f:

for data in f.readlines():

data = data.split()[:5] #get first rectangle if lines wrong like 10 13 21 75 82 74 25 16 21 22

#It simple way, but good for concept demonstration

rectangle = Rectangle(data[0], data[1], data[2], data[3], data[4])

rectangles[data[0]] = rectangle #Add rectangle to container

for i in rectangles:

print i, ":", rectangles[i]

测试:

9 : IMG_NUMBER 9; lefttopcorner.X 49; lefttopcorner.Y 25; width 72; height 25 

8 : IMG_NUMBER 8; lefttopcorner.X 17; lefttopcorner.Y 30; width 70; height 30

10 : IMG_NUMBER 10; lefttopcorner.X 13; lefttopcorner.Y 21; width 75; height 21

以上是 用Python从txt文件加载矩形数据? 的全部内容, 来源链接: utcz.com/qa/264211.html

回到顶部