组织用于处理统计信息的python代码

组织用于处理统计信息的python代码,python,Python,我将根据以下信息创建统计数据:哪些构建成功或失败,以及每个项目有多少构建成功 我根据我看到的新项目和内部处理的统计信息创建ProjectStat类。为了打印总体统计数据,我需要遍历所有ProjectStat实例。为了打印每个项目的成功统计数据,我需要再次通过它们,等等,任何类型的统计数据。我的问题是简化处理循环的方式,即不要每次都通过字典。也许使用decorator或decorator模式将是一种类似python的方式?如果ProjectStat的实例数量动态更改,如何使用它们 代码如下: cl

我将根据以下信息创建统计数据:哪些构建成功或失败,以及每个项目有多少构建成功

我根据我看到的新项目和内部处理的统计信息创建ProjectStat类。为了打印总体统计数据,我需要遍历所有ProjectStat实例。为了打印每个项目的成功统计数据,我需要再次通过它们,等等,任何类型的统计数据。我的问题是简化处理循环的方式,即不要每次都通过字典。也许使用decorator或decorator模式将是一种类似python的方式?如果ProjectStat的实例数量动态更改,如何使用它们

代码如下:

class ProjectStat(object):
 projectSuccess = 0
 projectFailed = 0
 projectTotal = 0

def addRecord(self, record):
    if len(record) == 5: record.append(None)
    try:
        (datetime, projectName, branchName, number, status, componentName) = record
    except ValueError:
        pass
    self.projectTotal += 1
    if status == 'true': self.projectSuccess += 1
    else: self.projectFailed += 1
def addDecorator(self, decorator):
    decorator = decorator


def readBuildHistoryFile():
dict = {}
f = open("filename")
print("reading the file")
try:
    for line in f.readlines():
        #print(line)
        items = line.split()
        projectName = items[1]
        projectStat = dict[projectName] = dict.get(projectName, ProjectStat())
        projectStat.addRecord(items)
        print(items[1])
finally:
    f.close()

success = 0
failed = 0
total = 0

for k in dict.keys():
    projectStat = dict[k]
    success += projectStat.projectSuccess
    failed += projectStat.projectFailed
    total += projectStat.projectTotal

print("Total: " + str(total))
print("Success: " + str(success))
print("Failed: " + str(failed))

if __name__ == '__main__':
 readBuildHistoryFile()

我不确定我是否理解这个问题,但我还是会尝试回答:)

备选案文1:

total = sum([project.projectTotal for project in dict.values()])
success = sum([project.projectSuccess for project in dict.values()])
failed = sum([project.projectFailed for project in dict.values()])
备选案文2:

(total,success,failed) = reduce (lambda x,y:(x[0]+y[0],x[1]+y[1],x[2]+y[2]), [(project.projectTotal,project.projectSuccess,project.projectFailed) for project in dict.values()])

你能修一下压痕吗?怎么了?这是我的第一篇文章,我所做的只是复制,因为这是接口允许的。如何在页面上的代码中将选项卡指定为选项卡?谢谢。获取信息的好技巧。现在,如果我想获得每个项目的统计数据,那么我将向ProjectStat添加print方法,并使用您的建议调用它。我唯一关心的是我是否需要每次翻阅字典?为了得到总的,成功,失败,然后统计每个项目后,我将添加打印方法,我需要4次指定为字典的周期,如果将有很多记录,然后它可以消耗。你认为呢?我认为这不会是一个缓慢的行动。首先尝试一下,只有当您遇到性能问题时,才尝试进行优化。