这节,我们来学习下统计多个文件字数的方法。
之前在出版图书的时候,每个章节都写入了一个单独的 Word 中,这就导致无法使用 Word 自带的字数统计功能,一次性统计所有章节的字数,自然也就不能分别统计多文件的汉字、英语和标点符号的字数了。如果你在工作中也遇到过类似的情况,需要一次性统计大量的文本文件的字数,应该怎么解决呢?
今天就来教你,怎样使用 Python 来批量统计多个文件的字数和标点符号。
首先呢,我们先学习一下简单的操作:统计单个文件的字数。掌握了 Python 统计字数的基本操作,批量统计也就不在话下了。
怎样实现单个文件字数统计
统计单个文件的字数,需要用到 Python 的文件读写函数和变量这两个功能。Python 的读写函数是对文件内容的读取操作,变量呢,用来存储统计好的文件字数。
把统计单个文件字数的操作分为三个步骤,分别为:
1. 先把要统计的文件读入内存;
2. 再对读入到内存的字数数量进行统计,并用变量保存;
3. 最后是将结果写入统计字数的专用文件中。
先来学习一下用 Python 读取文件需要使用哪些函数和语法。
1. 把文件内容读取到内存中
Python 实现读取文件内容到内存的函数有三个,这三个函数原理相同,但是读取的内容多少有些不同,分别为:
read() ,逐个字符读取,一直读取到文件全部内容结束;
readline(),读取一行内容;
readlines(),读取多行内容。
对于统计单个文件字数的需求,选择哪个读取函数更合适呢?由于统计字数需要逐个字读取再对字数进行累加,因此,我使用 read() 函数将文件中所有的文字读入到内存中,相比按行读取,实现起来更加简单。
将文件内容读入变量后,变量中的文字内容和保存在文件中的文字内容相同,接下来我再通过统计字数的函数对变量进行统计,就能统计出一个文件里的文字有多少字数了。
具体如何实现呢?举一个例子。
例如,这里有一个需要统计字数的文件 e.txt,它的内容为:
e约等于2.718281828
核心实现代码如下:
import pathlib
file_name = "e.txt"
# 取得脚本所在目录
current_path = pathlib.PurePath(__file__).parent
# 和脚本同目录下的文件绝对路径
file = current_path.joinpath(file_name)
# 打开文件
with open(file, encoding='utf-8') as f:
# 读取文件
content = f.read()
words = content.rstrip()
number = len(words) # 统计字数
print(number)
# 15
通过这段代码,你会发现,文件的读取函数是实现字数统计的关键功能。下面,我重点给你讲解下 Python 是怎么读取文件的。
Python 要想读取一个文件,需要经过打开、读取和关闭这三个步骤。
在代码的第 11 行,我通过 open() 函数实现了文件的打开功能。需要注意的是,我为 open() 函数设置了两个参数,分别是:
1. file 变量,表示要打开文件的名称;
2. encoding 变量,表示文件的编码格式。
解释下这两个参数。第一个参数 file 变量的值是要操作的文件路径和文件名称,你需要正确指定它所在的路径和文件名称。第二个参数 encoding 变量的值指定了以哪种字符编码打开文件,错误的字符编码会导致内容读取异常,文字内容显示为“乱码”。
我们来具体看一下第一个参数 file 变量的路径是怎么正确进行设置的。
对 file 变量进行赋值时,需要注意赋值时的路径和文件的真实路径是否一致,如果 file 变量中的路径和真实路径不一致的话,Python 程序运行的时候会提示找不到文件的错误。那应该如何确保路径正确呢?
我们通常的做法是事先在字符终端上取得要操作的文件的完整路径,再将完整路径作为字符串赋值给变量 file,这样你就可以直接使用正确的文件路径了。但是这样操作步骤繁琐,且不够灵活。所以还有一种比较灵活的方法,那就是将要操作的文件和 Python 脚本文件放在相同的目录里,通过获取 Python 脚本文件的目录,间接获得要操作的文件目录。