Python实战:读取TXT成绩数据并自动清洗取前三

沿途有光
沿途有光
发布时间:2026-10-12| 4人浏览过
原创

本文介绍如何使用Python对含有多重时间分隔符的TXT成绩数据进行清洗与提取。通过封装文件读取、分隔符动态识别、集合去重及排序逻辑,可直接获取每个学生无重复的最快前三次成绩,帮助新手快速掌握基础的数据处理与字符串操作技巧。

数据处理目标与准备条件

在实际应用场景中,原始数据往往来自不同终端或手动录入,导致格式杂乱。本例以james、julie、mikey、sarah四名学生的成绩记录为例,数据文件中混杂了减号“-”、冒号“:”和点号“.”作为分秒分隔符。我们的目标是利用Python实现自动化,统一将时间格式标准化为“分.秒”,剔除重复项后按升序排列,最终输出每人最优的三项成绩。开始前请确保已安装Python环境,并在同级目录下准备好对应的四个成绩文本文件。

核心实现步骤

第1步:准备测试数据文件

在本地创建工程文件夹,新建四个纯文本文件并分别写入以下混合格式的原始成绩数据。注意每行仅存放一条长串数据,无需换行:

  • james.txt: 2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22
  • julie.txt: 2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21
  • mikey.txt: 2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38
  • sarah.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数据处理与基础算法实战的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。