Python 2.7 Read and Write CSV File

最近在分析報告,由於報告數目較多有100+,手動查看比較麻煩且費時,就用Python寫了一個自動分析報告Pass/Fail的腳本,本來開始用Python 3.8+Pandas寫好了, 但是目標機器上安裝的是Python2.7,所以最終沒有用Pandas.

這裏主要分析的報告的測試結果,按照Pass和Fail進行分類,基於此,分析邏輯如下:

1.對於表頭Header是否位於第一行需要判斷,同時報告中無關行需要跳過;

2.測試結果位於最後一個Column,對這一列進行遍歷,有一個Fail即判斷爲Fail,如果遍歷完沒有Fail,即爲Pass;

3.根據分析結果將報告放到不同的文件夾,同時打印Summary.

import csv
import os
import shutil

# Create path for classification
reports_path = 'test'
reports_summary_path = 'test\\TestResultsSummary.csv'
pass_folder = reports_path + '\\Pass\\'
fail_folder = reports_path + '\\Fail\\'
dict_test_results = {}

# Create folder Pass/Fail
if not os.path.exists(pass_folder):
    os.makedirs(pass_folder)
if not os.path.exists(fail_folder):
    os.makedirs(fail_folder)

# Analyse and classify the reports
for file in os.listdir(reports_path):
    isFail = False
    isReport = False
    if file.endswith('.csv') and file.startswith('result'): # find CSV file
        orig_path = reports_path + '\\' + file
        print(file)
        with open(orig_path, 'r') as csvDataFile:
            csv_reader = csv.reader(csvDataFile)
            for row in csv_reader:
                if len(row) < 3:
                    continue
                if row[-1] == 'Result' or row[-1] == 'PassFail':
                    isReport = True
                if row[-1] == 'Fail' or row[-1] == 'FAIL':
                    isFail = True
                    break
        if isFail and isReport:
            shutil.move(orig_path, fail_folder + file)  # Move report to Fail folder
            dict_test_results[file] = 'Fail'
        elif ~isFail and isReport:
            shutil.move(orig_path, pass_folder + file)  # Move report to Pass folder
            dict_test_results[file] = 'Pass'

# output the test summary
fail_count = 0
pass_count = 0
with open(reports_summary_path, 'w', newline='') as csvFile:
    csv_writer = csv.writer(csvFile)
    for item, result in dict_test_results.items():
        if result == 'Fail':
            fail_count += 1
        if result == 'Pass':
            pass_count += 1
    csv_writer.writerow('Fail: ' + str(fail_count) + ',' + 'Pass: ' + str(pass_count))
    csv_writer.writerow('') # empty line
    csv_writer.writerow(['Test Item', 'Result'])
    for item, result in dict_test_results.items():
        csv_writer.writerow([item, result])

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章