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
相关产品推荐
相关产品推荐

