我正在尝试将数据解析到电子表格中,以创建报告以将一些数据分发给我们的组织。我对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行或更少行的电子表格外,我在网络上找不到任何东西。我已经基于这些示例编写了代码,但看起来笨拙又脆弱。
答案 0 :(得分:-1)
我要说的是您同事的建议。这可能很乏味,尽管这就是为什么我们将大型类的代码分成自己的文件的原因。或类似类的文件。
如果您的主类和类位于同一目录中,则可以访问另一个文件中的类。
让您的代码成为您的main.py
,并将类定义定义为ObjClass.py
或类似名称。然后,只需在要运行的main.py
文件顶部添加一个导入即可。
from ObjClass import obj
...
#Create obj
obj = obj(hostname, description, ..., status)
您可以通过将对象的__init__
更改为以下方式来摆脱set方法:
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)