You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python读取TXT文件并对同一学生的出勤时长求和(解决重复键问题)

嘿,这个需求其实用字典完全能搞定——你担心的重复键问题根本不会出现,因为我们不是往字典里塞重复的键,而是用键来对应累加的时长值。下面给你一步步拆解最优实现方式:

解决思路

核心逻辑非常清晰:用字典的键唯一标识学生,值用来累计该学生的总出勤时长:

  • 先把每条记录拆分成「学生名字」和「出勤时长」两部分
  • 遍历所有记录,若学生已在字典中,就把新时长加到对应值上;若未出现过,就新增键值对初始化时长
具体代码实现

先看完整可运行的代码,再逐个环节解释:

# 读取TXT文件内容(替换成你的文件路径)
with open('attendance.txt', 'r', encoding='utf-8') as f:
    content = f.read().strip()

# 按示例里的顿号分割成单个记录
records = content.split('、')

# 初始化字典存储汇总结果
attendance_total = {}

# 遍历处理每条记录
for record in records:
    # 拆分名字和时长:找到第一个数字的位置,前面是名字,后面转成整数时长
    for idx, char in enumerate(record):
        if char.isdigit():
            name = record[:idx]
            hours = int(record[idx:])
            break
    # 更新字典:核心逻辑,无重复键问题
    if name in attendance_total:
        attendance_total[name] += hours
    else:
        attendance_total[name] = hours

# 按要求格式输出结果
for name, total_hours in attendance_total.items():
    print(f"{name}的出勤时长为{total_hours}小时")
关键环节解释
  1. 文件读取:用with open上下文管理器,既能安全读取文件,又不用手动关闭文件,避免资源泄漏。
  2. 记录分割:示例里的记录用顿号分隔,所以用split('、')把整段内容拆成单个记录的列表。
  3. 拆分名字与时长:因为记录格式是「纯字母名字+数字时长」,所以遍历字符找到第一个数字的位置,以此为界拆分出名字和时长(转成整数方便计算)。
  4. 字典更新:这是解决你顾虑的核心——我们从来不会插入重复键,只会更新已有键对应的值:如果学生已经在字典里,就把新时长累加到已有值上;如果是第一次出现,就新增键值对。
  5. 结果输出:遍历字典的键值对,按你要求的格式打印最终汇总结果。
测试验证

如果你的TXT文件内容是:John0550、John0550、Sally1007,运行代码后会输出:

John的出勤时长为1100小时
Sally的出勤时长为1007小时

完全匹配你的期望效果~

内容的提问来源于stack exchange,提问作者Mac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:47:48