用 Python 写一个统计文本文件行数和词数的小工具

举报
yd_239248698 发表于 2026/11/06 17:10:39 2026/11/06
【摘要】 用 Python 标准库写一个命令行小工具,输入文本文件路径即可统计行数、词数、字符数和空行数,并附运行示例和核对过程。

在日常开发和写文档时,经常需要快速知道一个文本文件有多长:多少行、多少个词、多少个字符。本文用 Python 写一个只有几十行的小工具,输入一个文件路径,就在命令行打印这几项统计结果。

这个小工具做什么

  • 统计行数:按换行切分后的行数。
  • 统计词数:按空白字符切分后的词数,中文文本没有空格时会被算作一个词,这一点要留意。
  • 统计字符数:包含换行符在内的全部字符数。
  • 统计空行数:去掉首尾空白后为空的行数。

完整代码

把下面的代码保存为 count_text.py,只需要 Python 标准库,不需要安装任何第三方包。

import sys
from pathlib import Path


def count_text(path):
    text = Path(path).read_text(encoding="utf-8", errors="replace")
    lines = text.splitlines()
    words = text.split()
    return {
        "lines": len(lines),
        "words": len(words),
        "chars": len(text),
        "blank_lines": sum(1 for line in lines if not line.strip()),
    }


if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("用法: python count_text.py <文件路径>")
        raise SystemExit(2)
    result = count_text(sys.argv[1])
    for key, value in result.items():
        print(f"{key}: {value}")

代码说明

  • Path.read_text(encoding="utf-8", errors="replace") 用 UTF-8 读文件,遇到无法解码的字节时用替换字符代替,不会直接报错退出。
  • text.splitlines() 按换行切分,最后一行即使没有换行符也会被算作一行。
  • text.split() 不带参数时按任意空白切分,连续多个空格、制表符和换行都只算一个分隔符。
  • 空行判断用 not line.strip(),只包含空格或制表符的行也被算作空行。
  • 命令行参数不是恰好一个时,打印用法并以退出码 2 结束,方便在脚本里判断调用是否正确。

运行示例

先准备一个示例文件 example.txt,内容如下:

hello world

python

然后运行:

python count_text.py example.txt

输出是:

lines: 3
words: 3
chars: 20
blank_lines: 1

核对一下:文件一共 3 行,其中 1 行是空行;hello world 是 2 个词,python 是 1 个词,共 3 个词;字符数包含换行符,hello world\n 占 12 个,空行占 1 个,python\n 占 7 个,共 20 个。

可以顺手改的地方

  • 只想看某一项时,可以把字典改成只打印需要的那一项。
  • 需要统计多个文件时,可以在 main 里循环处理 sys.argv[1:],逐个文件打印结果。
  • 如果文件很大,不想一次读入内存,可以改成按行流式读取,逐行累加行数、词数和空行数。

这个小工具没有网络请求,也不写任何文件,只读输入文件,适合放在自己的工具箱里随时使用。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。