Python字符统计直方图函数读取本地文本文件输出异常如何修正
错误原因
- 从文件读取的文本包含原字符串测试场景没有的特殊空白字符:换行符
\n、缩进用的制表符\t,你原来的letterhelper函数仅移除了普通空格、逗号、句号三类字符,没有过滤这些额外的空白符号,导致统计时出现空白字符对应的条目。 - 调用
charHistogram时传入的文件名是'data',和实际存在的data.txt文件名不匹配,会触发文件找不到的报错。 - 代码直接用
open()打开文件没有手动关闭,存在资源泄漏风险,更推荐用with上下文管理器自动处理文件关闭逻辑。 - 原逻辑的
set.remove()容错性很差,如果文本中不存在要移除的字符(比如某段文本没有逗号),会直接抛出KeyError异常。 - 最后多输出的
None是因为你用print()调用了没有返回值的charHistogram函数,函数默认返回None就会被打印出来。
修复方案
我们把过滤逻辑从「移除指定非目标字符」改成「仅保留小写字母」,逻辑更稳妥也能覆盖所有非字母字符的过滤需求,同时修正文件名和文件读取逻辑:
def letterhelper(content): # 只保留a-z字母,自动过滤所有符号、空白字符 filtered = [c for c in content if c.isalpha()] c_r = set(filtered) f = [] for x in c_r: f.append([-filtered.count(x), x]) return f def charHistogram(file_path: str): # 用with上下文管理器自动关闭文件,指定编码避免乱码 with open(file_path, 'r', encoding='utf-8') as f: q = f.read().lower() g = letterhelper(q) for t in sorted(g): print(t[1], (-t[0]) * '+') # 传入正确的完整文件名,不需要套print charHistogram('data.txt')
内容的提问来源于stack exchange,提问作者Joshua Bradley
相关产品推荐
相关产品推荐

