2009-12-16 75 views
0

我將根據信息創建統計信息哪些構建是否成功以及每個項目有多少。組織用於處理統計信息的Python代碼

我創建ProjectStat類每個新項目我看到和內部處理的統計信息。爲了打印整體統計信息,我需要通過所有ProjectStat實例。爲了打印每個項目的成功統計數據,我需要再次通過它們,以此類推。我的問題是簡化處理循環的方式,即不要每次都傳遞字典。也許使用裝飾器或裝飾器模式會是pythonic方式?那麼如果動態更改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

你能修好縮進嗎? – 2009-12-16 09:27:04

+0

它是什麼?這是我的第一篇文章,我所做的只是複製,因爲它是由接口允許的。我如何在頁面上的代碼中將選項卡指定爲選項卡? – yart 2009-12-16 12:24:08

回答

1

我不知道我理解的Q,但我會盡量嘗試回答:)

選項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()]) 
+0

謝謝Ofri。獲取信息的好技巧。現在,如果我想獲得每個項目的統計信息,那麼我會將打印方法添加到ProjectStat並使用您的建議調用它。如果我每次需要閱讀字典時都需要留下唯一的關注點?爲了在添加打印方法後獲得總體成功率,成功率,失敗率以及每個項目的統計數據,我需要爲循環指定4次字典,並且如果會有大量記錄,那麼它可能會消耗。你怎麼看? – yart 2009-12-16 12:17:11

+0

我不認爲這會是一個緩慢的操作。首先嚐試一下,只有在出現性能問題時才嘗試優化。 – 2009-12-16 14:03:01