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

如何用Python统计文本文件中非转发/私信的Top N原创发帖用户?

如何统计原创发帖量Top N用户(Twitter风格数据)

嘿,我来帮你搞定这个需求!咱们先把要做的事情拆解清楚,再一步步重构代码:

核心需求拆解

咱们要实现的功能有这几个关键点:

  • 只统计原创帖子:排除消息以RT(转发)或DM(私信)开头的内容
  • 计算每个用户的原创发帖数量
  • 接收用户输入的n,输出发帖量最多的前n位用户
  • 排序规则:先按发帖量降序排列,发帖量相同的用户按字典序升序排列
  • 输出要做到列对齐,看起来更规整

代码重构思路

原来的代码是统计所有单词的词频,和咱们的需求完全不匹配,所以需要彻底重构统计逻辑:

  1. 筛选原创帖子:遍历每一行,把用户名和消息内容分开,判断消息开头是不是RT/DM,只有非转发/非私信的内容才计入用户的发帖数
  2. 统计用户发帖量:用字典记录每个用户的原创帖子数量
  3. 自定义排序规则:用负的发帖量实现降序,同时把用户名作为次要排序键保证字典序
  4. 接收用户输入:用input()获取n并转成整数
  5. 格式化输出:用格式化字符串实现列对齐

完整实现代码

# 初始化用户原创发帖计数器
user_post_counts = {}

# 安全读取文件(自动关闭文件句柄)
with open('streamt.txt', 'r') as file:
    for line in file:
        line = line.strip()
        if not line:
            continue  # 跳过空行,避免报错
        
        # 分割用户名和消息内容:只分割一次,确保消息里的空格不影响
        parts = line.split(maxsplit=1)
        username = parts[0]
        
        # 容错处理:防止没有消息内容的行
        if len(parts) < 2:
            continue
        
        message = parts[1]
        # 判断是否为原创帖子:消息不以RT或DM开头
        message_words = message.split()
        if not message_words:
            continue
        first_message_word = message_words[0]
        if first_message_word not in ('RT', 'DM'):
            # 更新用户计数:不存在则初始化为0再加1
            user_post_counts[username] = user_post_counts.get(username, 0) + 1

# 接收用户输入的n
n = int(input("Enter n: "))

# 排序:先按发帖量降序,相同数量按用户名字典序升序
# 用(-count, username)作为排序键,利用Python排序的稳定性实现需求
sorted_users = sorted(
    user_post_counts.items(),
    key=lambda item: (-item[1], item[0])
)

# 输出前n个用户,列对齐显示
for username, count in sorted_users[:n]:
    print(f"{count:3d} {username}")

测试运行结果

运行代码后输入10,输出和期望完全一致:

Enter n: 10
  3 andrew
  2 fred
  1 john
  1 judy

关键细节说明

  • split(maxsplit=1):这个方法能精准分割用户名和消息,不管消息里有多少空格都不会出错
  • 排序键lambda item: (-item[1], item[0]):负号让发帖量降序排列,用户名作为次要键保证相同数量的用户按字典序排列
  • f"{count:3d}":格式化数字占3个字符宽度,轻松实现列对齐效果
  • with open():比直接open()更安全,不需要手动关闭文件,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:01:23