使用python创建具有多个列的电子表格

使用python创建具有多个列的电子表格,python,architecture,Python,Architecture,我正在尝试将数据解析为电子表格,以创建一个报告,将一些数据分发给我们的组织。我对python和编码还是相当陌生,但我所做的似乎是错的。一位同事提到我应该创建一些对象,并使用字典中的对象输出到csv。我当前的代码有点像这样 #Create obj obj(hostname, description, ..., status) #Create csv with open(<filepath>, 'w', newline='') as csvfile: #create the h

我正在尝试将数据解析为电子表格,以创建一个报告,将一些数据分发给我们的组织。我对python和编码还是相当陌生,但我所做的似乎是错的。一位同事提到我应该创建一些对象,并使用字典中的对象输出到csv。我当前的代码有点像这样

#Create obj
obj(hostname, description, ..., status)

#Create csv
with open(<filepath>, 'w', newline='') as csvfile:
    #create the headers
    fieldnames = ['field1', 'field2', ..., 'field15']
    writer = csv.DictWriter(csvfile, fieldnames = fieldnames)
    writer.writeheader()
    for (id,obj) in dict.items():
        item = {'field1': obj.hostname, 'field2': obj.description, ..., 'field15':obj.status}
        #Add to the csv
        writer.writerow(item)
#Create obj
class obj:

    def __init__(self):
        self.hosts = set([])

    def addHost(self, hostname):
        self.hosts.add(hostname)

    def removeHost(self, hostname):
        self.hosts.remove(hostname)

    def setDescription(self, description):
        self.description = description

    def getDescription(self):
        return self.description

由于每个对象都有大量属性,因此在类声明下,这已经成为一个相当长的列表。这让我怀疑这是否是一种错误的方法。我没有受过任何培训,除了创建一个包含3行或更少行的电子表格,我在网上找不到任何东西。我的代码是基于这些示例编写的,但它似乎既笨重又脆弱。

我想说,这符合您的同事的建议。这可能很乏味,尽管这就是为什么我们将大型类的代码分离到它们自己的文件中。或类似类的文件

如果main和类位于同一目录中,则可以访问另一个文件中的类

让您的代码成为您的
main.py
,并将类定义为
ObjClass.py
或类似。然后,只需将导入添加到将要运行的
main.py
文件的顶部

from ObjClass import obj
...
#Create obj
obj = obj(hostname, description, ..., status)
通过将对象的
\uuuu init\uuu
更改为:

class obj:

    def __init__(self, description=None, ...=None, status=None):
        self.hosts = set([])
        self.description = description
        self. ... = ...
        self.status = status
这将允许您在启动时定义参数(如果有),然后在以后使用以下方法更改它们:

obj.description = description
而不是

obj.setDescription(description)

对对象初始化中声明的属性执行当前的操作,还是初始化对象,然后在程序中添加属性更好?我正在创建一个单独的文件来导入对象和方法,我的计划是创建一个空白对象,并在解析数据时添加数据,而不是在初始化时添加所有属性。我将声明对象本身,然后稍后添加属性。这样,如果你在开始时没有所有的属性,你就不会有问题。如果在对象启动时已经存储了属性,那么可以将它们设置为可选参数,从而使您能够直接分配它们!