最近学习python,用python实现一个小需求,最后写入excel使用到pandas模块:
某中学学生在500米短跑训练比赛中的数据,体育老师把学生成绩结果记录在文件中(studentdata.txt),记录格式如下: 卡纳瓦, c0235-11,3:27,3:33,3-46,3-41,3:39,3:40,3.48,3:42,3:22 含义:学生姓名,学号,短跑成绩 体育老师把每个学生数据整理并且保存到excel中,数据格式为学生姓名、出生日期、第一成绩、第二成绩、最差成绩。 其中成绩数据有些不是标准的,需要统一,例如3-36、3.36改为3:36 思路: 文件读取、字符串处理、去重排序、excel生成
studentdata.txt
王晓辉,c0218-02, 3:51,3.42,3:31,3-25,3-51,3:35,3:21,3.18,3-39
肖凤然,c0226-07,3:51,3:30,3-45,3:39,3:30,3:52,3:34,3:24,3.47
马晓晨, c0245-23,3:54, 3:50,3-31,3:36,3:34,3:40,3:31,3-19,3:21
李再立,c0213-18,3:52,3:50,3-35,3:32,3:34,3:36,3:32,3-31,3-19
马云云, c0283-78,3:24,3:31,3-25,3:44,3:44,3:31,3:45,3:47,3.13
卡纳瓦, c0235-11,3:27,3:33,3-46,3-41,3:39,3:40,3.48,3:42,3:22
代码:ardoscore.py
# encoding:utf-8
import pandas as pd
csvList = []
def datatrain():
# 读取文件
with open("studentdata.txt", "r") as f:
lines = [line.strip() for line in f.readlines()]
for scoreinfo in lines:
resultList = []
studentInfo = scoreinfo.split(',')
resultList.insert(0, studentInfo[0]) # 学生姓名
resultList.insert(1, ' ' + studentInfo[1].lstrip()) # 出生日期
scoreList = list(set(studentInfo[2:]))
for i in scoreList:
scoreList[scoreList.index(i)] = i.lstrip().replace('.', ':').replace('-', ':')
scoreList.sort(cmp=None, key=None, reverse=False)
resultList.insert(2, scoreList[0]) # 第一成绩
resultList.insert(3, scoreList[1]) # 第二成绩
resultList.insert(5, scoreList[-1]) # 最差成绩
csvList.append(resultList)
writeToCsv(csvList)
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 王晓辉 c0218-02 3:18 3:21 3:51
1 肖凤然 c0226-07 3:24 3:30 3:52
2 马晓晨 c0245-23 3:19 3:21 3:54
3 李再立 c0213-18 3:19 3:31 3:52
4 马云云 c0283-78 3:13 3:24 3:47
5 卡纳瓦 c0235-11 3:22 3:27 3:48
结果数据写入excel截图: