如何编写读取TXT文件并累计用户时长的脚本?
解决方案
1. 定义用户类
先定义一个简单的User类,用来存储用户姓名和累计时长:
class User: def __init__(self, name): self.name = name self.total_duration = 0.0 def add_duration(self, duration): self.total_duration += duration
2. 读取文件并处理数据
用字典管理用户对象(键为用户名,值为对应的User实例),快速判断用户是否已存在,实现累加逻辑:
# 初始化存储用户的字典 users = {} # 读取目标文本文件 with open('data.txt', 'r') as file: for line in file: # 去除行首尾空白,按空格拆分(最多拆4次,避免姓名被拆分) parts = line.strip().split(maxsplit=4) if len(parts) != 5: continue # 跳过格式错误的行 # 提取用户名和时长 username = f"{parts[0]} {parts[1]}" duration = float(parts[4]) # 处理用户对象:存在则累加时长,不存在则新建 if username in users: users[username].add_duration(duration) else: users[username] = User(username) users[username].add_duration(duration) # 输出最终统计结果 for user in users.values(): print(f"用户: {user.name}, 总时长: {user.total_duration:.2f}")
3. 关键逻辑说明
- 字典的作用:以用户名作为键,能在O(1)时间内判断用户是否已存在,比遍历列表高效很多。
- split(maxsplit=4):确保姓名的两个单词不会被拆分,因为每行结构固定为「名 姓 日期 时间 时长」,拆分4次刚好得到5个有效部分。
- 格式检查:加入行元素数量判断,避免因文件内存在无效行导致报错。
运行代码后,针对你提供的文本内容,会输出:
用户: John Smith, 总时长: 13.24 用户: Chris Rock, 总时长: 8.64 用户: Jane Doe, 总时长: 7.60
内容的提问来源于stack exchange,提问作者Boberer1
相关产品推荐
相关产品推荐

