如何用Python读取文本文件生成列表并统计姓名出现次数
代码问题修复方案
现有代码的核心问题
- 总计数逻辑错误:你定义的
count变量仅在with块中执行了1次count = count + 1,所以不管文件里有多少行姓名,输出永远是1,总姓名数直接取拆分后的行列表长度即可。 - 多余的文件打开操作:开头的
f = open("names.txt", "r")没有关闭逻辑,后续已经用with上下文管理器打开文件了,这行可以直接删除。 - 行内容截取错误:
line[14:]会强制截取每行第14位之后的内容,如果你存储姓名的文件每行没有固定14位的前缀内容,会导致截取到空值或者错误内容,直接取整行去空白即可。
修复后代码
from collections import Counter with open("names.txt", "r", encoding="utf-8") as f: # 按行拆分文件内容,过滤空行、去掉每行首尾的空白字符(换行、空格等) name_list = [line.strip() for line in f if line.strip()] # 统计总姓名数 total_count = len(name_list) # 统计每个姓名的出现次数 name_counter = Counter(name_list) print("There are this many names on the list:", total_count) # 输出所有姓名和对应出现次数 for name, cnt in name_counter.items(): print(f"{name}: {cnt}次")
补充说明
如果你的names.txt里的姓名不是每行一个,而是用逗号、空格等符号统一分隔的,只需修改拆分逻辑即可,比如逗号分隔的场景可以改成:
from collections import Counter with open("names.txt", "r", encoding="utf-8") as f: content = f.read() name_list = [i.strip() for i in content.split(',') if i.strip()] total_count = len(name_list) name_counter = Counter(name_list)
内容的提问来源于stack exchange,提问作者Sofia A
相关产品推荐
相关产品推荐

