Python实战:读取TXT成绩数据并自动清洗取前三
本文介绍如何使用Python对含有多重时间分隔符的TXT成绩数据进行清洗与提取。通过封装文件读取、分隔符动态识别、集合去重及排序逻辑,可直接获取每个学生无重复的最快前三次成绩,帮助新手快速掌握基础的数据处理与字符串操作技巧。
数据处理目标与准备条件
在实际应用场景中,原始数据往往来自不同终端或手动录入,导致格式杂乱。本例以james、julie、mikey、sarah四名学生的成绩记录为例,数据文件中混杂了减号“-”、冒号“:”和点号“.”作为分秒分隔符。我们的目标是利用Python实现自动化
核心实现步骤
第1步:准备测试数据文件
在本地创建工程文件夹,新建四个纯文本文件并分别写入以下混合格式的原始成绩数据。注意每行仅存放一条长串数据,无需换行:
james.txt: 2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22julie.txt: 2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21mikey.txt: 2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38sarah.txt: 2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55
第2步:切换至数据存储目录
为避免每次打开文件时填写绝对路径,代码首先使用os.chdir()将Python运行时的当前工作目录指向文件所在文件夹。示例路径为教程默认结构,实际使用时请替换为你的真实保存路径:
import os
os.chdir('你的实际数据目录路径')
第3步:封装数据读取与格式统一函数
为实现健壮的文件交互,定义get_filedata函数负责安全读取。它采用上下文管理器with open()自动释放资源,遇到IOError时捕获异常并返回None。读取后通过strip().split(',')清除首尾空格并按逗号切分字符串,得到初始列表。
接着编写modify_time_format进行字符串格式统一。该函数依次检测字符串中是否存在“-”、“:”或“.”,锁定对应的分隔符后再次调用split()将其拆分为分钟和秒数,最后拼接为标准的“分.秒”形式返回。此逻辑可兼容任意一种混合录入习惯,无需硬编码固定分隔符。
第4步:执行去重排序与结果提取
核心逻辑集中在get_prev_three函数中。流程分为四步:
1. 列表推导式遍历原始数据,批量应用时间格式转换。
2. 将转换后的列表传入set()转换为集合,天然滤除重复的时间记录。
3. 使用内置sorted()对集合元素按字典序升序排列(因格式已统一为xx.xx,字符串排序等价于数值大小排序)。
4. 切片返回索引0到3的前三项。
def get_filedata(filename):
try:
with open(filename) as f:
data = f.readline()
return data.strip().split(',')
except IOError as ioerr:
print('File Error' + str(ioerr))
return None
def modify_time_format(time_string):
if "-" in time_string:
splitter = "-"
elif ":" in time_string:
splitter = ":"
else:
splitter = "."
mins, secs = time_string.split(splitter)
return mins + '.' + secs
def get_prev_three(filename):
new_list = [modify_time_format(t) for t in get_filedata(filename)]
delete_repetition = set(new_list)
in_order = sorted(delete_repetition)
return in_order[0:3]
print(get_prev_three("james.txt"))
print(get_prev_three("julie.txt"))
print(get_prev_three("mikey.txt"))
print(get_prev_three("sarah.txt"))
完成判断与排错指南
运行脚本后,控制台应依次打印出四个列表,格式均为['xx.xx', 'xx.xx', 'xx.xx']。例如james的预期结果应为['2.01', '2.22', '2.34']。若出现空白输出或报错,请按以下顺序排查:
- 确认工作目录是否真的包含了目标.txt文件,路径拼写是否存在大小写差异。
- 检查TXT文件编码是否为标准UTF-8或ANSI,避免隐藏的非打印字符干扰readline()读取。
- 若需调整提取数量,直接修改最后一行切片范围如[0:N]即可,集合去重逻辑保持不变。
简要总结
本案例完整展示了Python数据处理的基础链路:从文件IO访问、动态分隔符识别,到利用集合特性高效数据去重,最后借助排序输出业务指标。代码结构清晰且易于复用,稍作参数化改造即可迁移至日志分析、运动计时等常规场景。以上就是Python读取TXT成绩数据并自动清洗取前三的详细内容,更多关于Python数据处理与基础算法实战的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













