用于分析Python中文件的数据的类结构

时间:2016-04-27 11:03:01

标签: python class

我需要一些Python的类帮助。 我需要存储来自不同文件的数据。

这个想法(这部分代码可以工作) - 我用它来存储每个文件所需的所有信息。

class Element():
  def __init__(self, filename):
    self.filename = filename
    self.function, self.name = readFile(self.filename)
    self.vector = make_vector(table_COG_general, self.function)

现在我觉得一个子课很有用:它存储一个对象列表" Element()" (这不是工作):

class ListElements(Element):
  def  __init__(self, filename, list_of_filenames):
    Element.__init__(self, filename)
    self.liste_elements = extractData(self.list_of_filenames)


list_of_filenames = ['data'+str(i)+'.txt' for i in range(1, 201)]

我的问题是我不应该使用" filename"作为类Elements()的参数(我不能这样使用类ListElements() - 函数readFile只需要一个文件名),但我不知道发送数据的任何其他方式到Elements()。

从那一刻起,我只是在main中创建了一个带有for循环的元素列表,但它不实用,因为我需要对数据进行一些分析,而宁愿使用所有的类方法

非常感谢你的帮助!

如果您有更好的想法存储这类数据,请分享:)

4 个答案:

答案 0 :(得分:1)

两个一般性评论:

  1. 我不认为在你的情况下使用类继承是合适的。您应该问自己ListElements Element 是否 Element
  2. 您是否查看了Pandas库以分析您的数据?它简化了文件I / O和数据处理。

答案 1 :(得分:0)

我建议你在你的init中创建一个变量self.list_of_elements,你可以传递一个文件名列表。然后在ListElement中创建一个函数,该函数使用每个文件名调用元素,并将这些对象也存储在ListElement函数中。然后,您可以从每个元素对象获取数据。 另外我建议不要让ListElement成为子对象,因为现在你的ListElement函数也获得了self.vector和self.function变量。我想这不是你想要的。

一个小例子:

class Element:
def __init__(self, filename):
    self.filename = filename
    self.function, self.name = readFile(self.filename)
    self.vector = make_vector(table_COG_general, self.function)

class ListElements:
    def  __init__(self, list_of_filenames):
        self.list_of_filenames = list_of_filenames
        self.elements = []

    def process_elements(self):
        for filename in self.list_of_filenames:
             self.elements.append(Element(filename))


list_of_filenames = ['data'+str(i)+'.txt' for i in range(1, 201)]

其他功能对我来说并不清楚他们做了什么,所以我无法建议你如何做到这一点。但是,使这些也是类功能可能是好的。 我希望你可以使用这个,如果你有问题可以随意提问!

答案 2 :(得分:0)

你在哪里使用chooseMedoids?它在哪里定义?

你的代码示例中的缩进不正确(我现在看到我也以错误的方式键入它)。你的脚本中是否有相同的内容?或者它是正确的方式吗?

答案 3 :(得分:0)

这是因为你试图为整个列表调用chooseMedoids。您需要遍历列表并为对象调用chooseMedoids。 例如:

for item in self.elements:
    item.chooseMedoids(k)