使用Python实现快速读写文件,跨文件字数统计
适用场景
1 | 使用Python来批量统计多个文件的字数和标点符号 |
实现单个文件字数统计
统计单个文件的字数,需要用到Python的文件读写函数和变量这两个功能。Python的读写函 数是对文件内容的读取操作,变量呢,用来存储统计好的文件字数。
- 先把要统计的文件读入内存;
- 再对读入到内存的字数数量进行统计,并用变量保存;
- 最后是将结果写入统计字数的专用文件中。
将文件内容读取到内存中
Python实现读取文件内容到内存的函数有三个,这三个函数原理相同,但是读取的内容多少有些不同,分别为:
1 | import pathlib |
open()函数参数说明:
第一个参数file变量的值是要操作的文件路径和文件名称,你需要正 确指定它所在的路径和文件名称。第二个参数encoding变量的值指定了以哪种字符编码打开文件,错误的字符编码会导致内容读取异常,文字内容显示为“乱码”。
获取完整路径
- 在代码中使用pathlib库的PurePath()函数,把当前Python脚本的路径转化为标准的 pathlib格式。
- 通过parent属性去掉脚本的文件名,取得当前脚本所在的路径。
- 再通过joinpath()函数把脚本所在的路径和e.txt文件名进行拼接,得到e.txt的完整路径。
这种取得脚本同目录下的其他文件完整路径的用法,要比直接指定文件完整路径用法更灵活。
__file__变量比较特殊,它是在Python中预先定义好的一个变量,默认情况下它的值会被 Python自动设置为当前脚本的完整路径名称。有了它,我就可以通过Python脚本的路径取得 e.txt的完整路径了。
设置字符编码
第二个参数的作用是设置open()函数使用何种字符编码打开文件。
函数传参调用
为什们指定这个参数的时候,要特意写出变量名称encoding呢?
在函数定义的时候我们可以为函数指定一个或多个参数,如果使用了多个参数,你在调用函 数的时候需要按顺序依次传入每一个参数。但是如果你想要使用某个参数默认值或不想按照 顺序传入参数时怎么办呢?函数调用时,还可以根据参数的关键字来指定为函数传入哪些参 数。比如说open()函数的参数有7个,
在open()函数的定义中,encoding参数是open()函数的第4个参数。如果我们只需要第1个和 第4个参数,其他参数需要保持默认时,就可以使用如下格式调用open()函数:
在代码中,调用open()函数时,由于file参数是open()函数的第一个参数,因此可以不用指定 参数的关键字。encoding参数并非open()函数定义的第二个参数,而是第四个参数,所以需 要指定它的参数名称为encoding,根据open()函数的定义,encoding=”utf-8”会作为 open()函数的第四个参数使用。这种使用关键字作为函数的参数的方式,也被称作函数的关键字传参方式。
with使用
with关键字下面的代码是缩进形式,和with关键字形成了一个语句块
在with语句 块结束之后,不必手动调用close()函数关闭文件,Python会自动将文件关闭。因此,你会看到我在程序中调用了open()函数打开文件,但是没有调用关闭文件的close()函数。
总的来说,相对于手动调用close()函数来关闭文件,使用with函数减少了打开过多文件造成系统资源浪费和数据丢失的风险。
文件读取
正确使用了open()函数的两个参数以后,会返回一个表示文件的对象f, 只有设置了正确 的文件路径、文件名称和字符编码,才能继续进行文件读取操作。文件的读取操作使用的是 read()函数,read()函数会根据文件的对象f,按照open()函数定义好的打开方式进行逐个字 的读取操作。Python对文件的其他操作,全都需要通过文件操作函数调用对象f来完成。
统计文件的字数
Python的内置函数**len()**来实现
len()函数在Python中最初设计的功能就是统计字符串的长度,即字符串中有多少字符。利用len()函数可以对字符串数据类型进行操作的特性,将文件一次性读入内存,放入字符串数据类型中。我在统计字数之前还增加了一个rstrip()函数,它会自动剔除出现在文件末尾的空行、空格,让你统计的结果更精确。
在进行文件字数统计的时候,需要注意,在代码中使用了read()函数实现了对文件内容的一
次性读取到内存的功能。如果你的文件较大,我建议你使用readline()函数按行读取,并逐行
统计字数,否则容易出现内存不足的问题。
将统计结果写入文件
将统计结果写入文件,可以对open()函数打开文件方式进行简单的修改,就可以实现文件写入功能了,写入文件的代码如下:
1 | with open("total.txt", "w", encodong="utf-8") as f: |
open()函数的第二个参数表示文件的打开方式,它默认值是“r”,代表了文件以读取方式进行打开。这时对象f只能进行文件读取操作,我们需要将第二个参数指定为”w”,就可以使用wirte()函数对文件进行写入操作了。而write()函数的第一个参数就是即将要写入文件的内容。
怎么统计多个文件的次数
对多个文件的字数统计,就可以使用for循环来实现批量读取多个文件的内容。
1 | p = Path(src_path) |
数字类型是一种非常适合进行整数、浮点数的转换和算数几何计算最常用的类型。在单文件字数统计的场景,用来储存每个文件的字数是最合适的类型。如果把场景扩展到统计多个文件的字数,使用一个数字类型的变量是不够的,你需要在循环中再增加一个新的数字类型的变量,对多个文件的统计结果进行依次累加就可以了。