如何用Python统计TXT文件中各首字母开头的名称数量
统计文本文件中各字母开头名称的数量
你的核心需求是统计bin-nombres.txt文件里,以A-Z(不区分大小写)每个字母开头的名称数量,同时算出总名称数。咱们先梳理下初始代码里的问题,再给出能实现需求的解决方案:
初始代码的问题点
counterByLetter函数逻辑偏差:它是把传入的单个字符和a-z字母做匹配计数,而非累计整个文件里每个字母开头的总数量- 文件处理时变量名重复(
lines = [lines.strip() for lines in fp]),容易造成逻辑混淆 - 每次循环调用
counterByLetter都会生成全新字典,完全没实现累计计数的核心目标
修正后的完整解决方案
import string def main(): try: # 初始化字母计数字典,每个小写字母初始计数为0 letter_count = {letter: 0 for letter in list(string.ascii_lowercase)} with open("bin-nombres.txt", 'r') as fp: for line in fp: line = line.strip() # 取每行第一个字符并转为小写,统一大小写规则 initial = line[0].lower() letter_count[initial] += 1 # 遍历字典输出结果,同时统计总名称数 total_names = 0 for key, value in letter_count.items(): total_names += value print("Names that start with the letter '{}' have {} entries.".format(key.upper(), value)) print("Total names in the file: {}".format(total_names)) except EOFError as e: print(f"Error reading file: {e}") if __name__ == "__main__": main()
代码关键逻辑说明
- 用
string.ascii_lowercase快速生成完整小写字母列表,避免手动输入a-z的繁琐,同时初始化每个字母计数为0 - 逐行读取文件,先去除每行首尾空白(比如换行符、空格),再把首字符转小写,确保大小写开头的名称能统一统计
- 遍历字典时将字母转为大写输出(更符合日常阅读习惯),同时累加所有计数得到总名称数
- 优化了异常提示信息,让错误反馈更清晰
运行后你会得到类似这样的输出:
Names that start with the letter 'A' have 3 entries.
Names that start with the letter 'B' have 20 entries.
...
Total names in the file: 127
内容的提问来源于stack exchange,提问作者Chris Michael
相关产品推荐
相关产品推荐

