我们在日常处理文件时,经常遇到一些需要对文件每行进行相同或不同操作的情况。在执行相应操作前我们当然需要首先做到逐行读取文件。在博主尝试后,发现python中有这几种方法。
一,readline()
readline是指一次读取文档中的一行(以'\n‘为分隔符)。这种情况适用于我们已经知道文档有多少行。代码示例如下:
with open('.\doc.txt','r') as f:
for _ in range(100):
line = f.readline()
.....
这里假设我们的文档有100行,那么执行100次循环即可。这种方法缺点就是我们需要预先知道文档的总行数
二,readlines()
readlines()是将文档的所有行一次读取到一个列表中,依旧是以\n作为分隔符,\n也包含在列表的每个元素中。代码实例如下:
with open('.\doc.txt','r') as f:
lines = f.readlines()
....
接下来只需要循环lines这个列表就可以执行相应操作了。但是当文档很大时,这种方法会占用较大内存
那么有什么方法可以弥补上述两种方法的缺点呢?可以参考博主考虑到的第三种方法。
三,:= 和 lambda 运算符
第三种方法结合了海象运算符:=和lambda表达式。首先介绍海象运算符,海象运算符是python3.8加入的新运算符,它允许我们在执行表达式的同时执行赋值运算。lambda表达式是python函数的简写方式。代码如下:
get_line = lambda : f.readline()
with open('.\doc.txt','r') as f:
while line := get_line():
.....
我们首先定义了get_line函数,然后在上下文管理器中加入了while循环,每次循环会执行一个get_line函数(读取文档中的一行),并将值赋值给line变量,当读取到文档结尾时循环结束。这样我们就可以在不知晓文档行数并且避免内存占用的情况下,对文档逐行读取并执行相应操作。
欢迎大家在评论区指出不足,积极讨论!