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

Python统计文件中各英文字母开头单词总数的问题求助

现有代码问题梳理
  • 未初始化全局计数容器:count变量定义在行循环内部,每次遍历新行时都会重置,无法累计全文的单词总数;且每次匹配到对应首字母就立刻打印,输出结果零散,不会汇总最终统计值
  • 路径格式错误:Windows路径中的反斜杠\是转义字符,直接书写会导致路径识别失败,需要用原始字符串或者替换为正斜杠
  • 单词分割逻辑粗糙:split(" ")只能按单个空格分割,遇到多个空格、制表符、换行符时会分割出空字符串,后续访问word[0]会触发索引越界错误
  • 匹配逻辑冗余:不需要遍历全部26个字母匹配首字母,直接判断首字母是否属于字母集合即可,运行效率更低
  • 语法错误:print语句中format前多写了多余的逗号,直接触发语法报错
  • 资源泄漏风险:文件打开后未主动关闭,可能占用系统IO资源
修正后完整代码
import string

# 初始化计数字典,a-z每个字母初始计数为0
count_map = {char: 0 for char in string.ascii_lowercase}

# 用with上下文管理器自动处理文件关闭,原始字符串避免路径转义问题,指定编码避免乱码
with open(r"I:\udemy\Assignment 0.txt", "r", encoding="utf-8") as text_file:
    for line in text_file:
        # 转小写后用无参split()分割,自动按任意空白字符分割、过滤空值
        words = line.strip().lower().split()
        for word in words:
            # 过滤空内容,判断首字母为英文字母时累加计数
            if word and word[0] in count_map:
                count_map[word[0]] += 1

# 统一输出所有字母的统计结果
for alphabet, total in count_map.items():
    print(f"以字母{alphabet}开头的单词总数量:{total}")
核心调整说明
  • 用string.ascii_lowercase直接生成a-z小写字母序列,无需手动逐个书写,减少出错概率
  • 用字典做全局计数容器,累计全文所有匹配首字母的单词数量,最后统一输出汇总结果,符合非去重统计的要求
  • 无参split()自动适配多种空白分割场景,避免生成空字符串导致的索引错误
  • 增加空内容校验逻辑,避免极端场景下的运行报错
  • 新增编码参数指定文件读取格式,避免特殊字符读取乱码问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:00:01