07|快速读写文件:如何实现跨文件的字数统计?

这节,我们来学习下统计多个文件字数的方法。

之前在出版图书的时候,每个章节都写入了一个单独的 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 脚本文件的目录,间接获得要操作的文件目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值