用 Python 写一个统计文本文件行数和词数的小工具
【摘要】 用 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)