我有一个文件,其中包含每行上对象的属性。我想采用以空格分隔的属性,并将它们添加到我的对象中。我希望列表中的对象,但我不能让它工作。我已经在我认为不应该做的事情的线旁边发表评论。或者,如果我只是传递单词列表,它会将整个列表存储在对象的第一个属性中。
class Brick(object):
def __init__(self, xopos=None, yopos=None, xcpos=None, ycpos=None, numb=None, prop=None):
self.xopos = xopos
self.yopos = yopos
self.xcpos = xcpos
self.ycpos = ycpos
self.numb = numb
self.prop = prop
bricklist = []
with open('data.txt', 'r') as f:
data = f.readlines()
for line in data:
words = line.split()
bricklist.append(Brick.xopos(words[0])) #line that doesnt work
for i in range(len(bricklist)):
print (bricklist[i].xopos)
数据就是
1 13 14 15 16 17
2 21 22 23 24 14
3 3 4 5 6 7
4 1 1 1 1 1
5 5 6 4 1 1
6 5 6 8 4 2
7 4 9 7 5 6
我是python的新手,我发现很多我的想法,实现的东西只是没有用,所以任何帮助都会非常感激。
答案 0 :(得分:1)
试试这个:
class Brick(object):
def __init__(self, values):
self.xopos = values[0]
self.yopos = values[1]
self.xcpos = values[2]
self.ycpos = values[3]
self.numb = values[4]
self.prop = values[5]
bricklist = []
with open('data.txt', 'r') as f:
for line in f.readlines()
bricklist.append(Brick(line.split())
for brick in bricklist:
print (brick.xopos)
不是单独传递每个属性,而是从文件中读取每一行,将其拆分为一个列表并将其传递给Brick对象的构造函数。
您可以在使用前验证__init__
的内容,从而改进values
方法。
答案 1 :(得分:0)
我建议引入一个函数,它接受一个字符串(在这种情况下是一行文本)并从中创建一个Brick
对象:
class Brick(object):
def __init__(self, xopos=None, yopos=None, xcpos=None, ycpos=None, numb=None, prop=None):
self.xopos = xopos
self.yopos = yopos
self.xcpos = xcpos
self.ycpos = ycpos
self.numb = numb
self.prop = prop
@classmethod
def from_string(cls, s):
values = [int(v) for v in s.split()]
return cls(*values)
with open('data.txt', 'r') as f:
bricklist = [Brick.from_string(line) for line in f]