1. 程式人生 > >python使用pandas模組實現檔案讀取、字串處理、去重排序、excel生成

python使用pandas模組實現檔案讀取、字串處理、去重排序、excel生成

最近學習python,用python實現一個小需求,最後寫入excel使用到pandas模組:

某中學學生在500米短跑訓練比賽中的資料,體育老師把學生成績結果記錄在檔案中(studentdata.txt),記錄格式如下:
卡納瓦, 2001-11-8,2:27,2:33,2-46,2-41,2:39,2:40,2.48
含義:學生姓名,出生日期,短跑成績
體育老師把每個學生資料整理並且儲存到excel中,資料格式為學生姓名、出生日期、第一成績、第二成績、第三成績、最差成績。
其中成績資料有些不是標準的,需要統一,例如2-48、2.48改為2:48
思路: 檔案讀取、字串處理、去重排序、Excel生成

程式碼:ardoscore.py

# encoding:utf-8

import pandas as pd


def datatrain():
    '''######################【step-1】讀取學員成績檔案######################'''
    with open("studentdata.txt", "r") as f:
        lines = [line.strip() for line in f.readlines()]

    csvList = []

    for scoreinfo in lines:
        studentInfo = scoreinfo.split(',')
        studentName = studentInfo[0]
        studentBirthday = studentInfo[1]
        studentScore = studentInfo[2:]
        scoreSet = set(studentScore)
        scoreList = list(scoreSet)

        for i in scoreList:
            '''######################【step-2】字串處理######################'''
            scoreList[scoreList.index(i)] = i.lstrip().replace('.', ':').replace('-', ':')

        '''######################【step-3】去重排序######################'''
        scoreList.sort(cmp=None, key=None, reverse=False)


        resultList = []
        resultList.insert(0, studentName)  # 學生姓名
        resultList.insert(1, ' ' + studentBirthday.lstrip())  # 出生日期
        resultList.insert(2, scoreList[0])  # 最好成績
        resultList.insert(3, scoreList[1])  # 第二名成績
        resultList.insert(4, scoreList[2])  # 第三名成績
        resultList.insert(5, scoreList[-1])  # 最差成績

        # 組裝寫入csv的list
        csvList.append(resultList)

    writeToCsv(csvList)


'''######################【step-4】Excel生成 - 將結果輸出到studentdata.csv######################'''
def writeToCsv(csvList):
    name = ['學生姓名', '出生日期', '第一成績', '第二成績', '第三成績', '最差成績']  # 表頭
    studentcsv = pd.DataFrame(columns=name, data=csvList)
    print(studentcsv)
    studentcsv.to_csv('studentdata.csv', index=False, encoding='gbk')


if __name__ == '__main__':
    datatrain()


執行輸出結果:

  學生姓名        出生日期  第一成績  第二成績  第三成績  最差成績
0  王曉輝   1999-3-12  2:22  2:25  2:39  2:58
1  肖鳳然   2000-1-16  2:30  2:34  2:39  2:59
2  馬曉晨   2001-7-21  2:32  2:34  2:35  2:54
3  李再立   2003-5-19  2:32  2:34  2:35  2:54
4  馬雲雲    1998-2-5  2:24  2:30  2:31  2:46
5  卡納瓦   2001-11-8  2:27  2:33  2:39  2:48

結果資料寫入excel截圖: