
本文详解如何在 pycharm(或任何 python 环境)中正确统计文本文件的行数、单词数和字符数,重点解决因文件指针位置导致的读取失败问题,并提供健壮、可复用的完整代码示例。
本文详解如何在 pycharm(或任何 python 环境)中正确统计文本文件的行数、单词数和字符数,重点解决因文件指针位置导致的读取失败问题,并提供健壮、可复用的完整代码示例。
在使用 Python 处理文本文件(如 lyrics.txt)时,一个常见误区是:文件对象只能被顺序读取一次。当您调用 for line in infile: 遍历完所有行后,文件指针已移动至文件末尾;此时再执行 infile.read() 将返回空字符串,导致字符数统计为 0,单词数误算为字符总数(而非真实单词个数)——这正是原代码中 wordCount = len(data) 逻辑错误与运行失效的双重根源。
正确的做法是:统一读取一次内容,再从中分别提取行数、单词数和字符数。推荐使用 with open(...) 上下文管理器确保安全关闭文件,并以文本模式('r')读取全部内容:
# 推荐写法:一次性读取,多维度解析
with open('lyrics.txt', 'r', encoding='utf-8') as f:
content = f.read() # 全量读入内存(适用于普通大小文件)
# 统计行数(注意:空行也计入)
line_count = len(content.splitlines())
# 统计单词数(按空白字符分割,过滤空字符串)
word_count = len([word for word in content.split() if word.strip()])
# 统计字符数(不含换行符等空白?按需选择)
char_count = len(content) # 总字符数(含空格、换行符)
# char_count = len(content.replace('\n', '').replace('\r', '').replace(' ', '')) # 纯字母数字字符(可选)
print(f"该歌曲共有 {line_count} 行")
print(f"共包含 {word_count} 个单词")
print(f"总字符数为 {char_count} 个")
✅ 关键注意事项:
PyCharm 2026.2是 JetBrains PyCharm 的指定版本安装包,下载地址指向官方 Windows 安装包直链,可用于旧项目兼容、版本回退和环境测试。
- ✅ 编码声明不可省略:歌词文件常含中文、特殊符号或 UTF-8 BOM,务必显式指定
encoding='utf-8',避免UnicodeDecodeError; - ✅
splitlines()vssplit('\n'):前者更鲁棒,能正确处理\r\n(Windows)和\n(Unix/macOS)换行符; - ✅ 单词定义需明确:
content.split()自动按任意空白(空格、制表符、换行)切分并自动剔除空字符串,适合常规歌词统计;若需更精确(如排除标点),可结合re.findall(r'\b[a-zA-Z]+\b', content); - ⚠️ 大文件慎用
read():若lyrics.txt极大(GB 级),应改用逐行迭代 + 累加方式,避免内存溢出。
综上,避免重复打开或手动 seek(0),而是采用“读一次、算多次”的设计,既简洁又高效。在 PyCharm 中运行时,确保 lyrics.txt 与脚本位于同一目录,或使用绝对/相对路径正确指向文件——这是本地开发环境下的基础但关键配置。










