提示
操作文件打开的方式可能有多种,这里就不介绍了;这里只是来说明一下读取的内容如何保存。
一般来讲要保存一连串的元素,大多数常用的选择是通过列表来保存。列表有一个比较明显的缺点就是当数据量过大时,内存占用较高。
这种情况下,就可以选择生成器(generator)方式,也就是用到的时候再去读取,内存占用明显较少。下面就生成器这种方式来做简要说明。
使用最多的通过yield
关键字,这里的yield
关键字,你可以当作一个return
的作用。这样理解可能比较容易一点。
实例
下面通过实例进行说明
import os
# 文件路径,这里设置为当前目录下的file.txt
path = 'data.txt'
def read_line_from_file(path):
if not os.path.exists(path):
return
for line in open(path, 'r'):
# 这里通过strip()函数去掉字符串两头的空白字符,否则打印行会携带换行符
yield line.strip()
if __name__ == "__main__":
for line in read_line_from_file(path):
print(line)
- data.txt:要读取的文件,内容设置如下
123
456
789
hello world
先看一下执行结果
说明
实质上生成器的调用是通过next()
操作的,并记录上次读取的位置,下次执行next()
时同记录的位置开始向后读取。
下面看一下,只读取两行
import os
# 文件路径,这里设置为当前目录下的file.txt
path = 'data.txt'
def read_line_from_file(path):
if not os.path.exists(path):
return
for line in open(path, 'r'):
yield line.strip()
if __name__ == "__main__":
result = read_line_from_file(path)
print(next(result))
print(next(result))
结果如下
注意:只能在同一个进程中依次读取,如果进程退出,再次执行,则从首行开始。
而 for .... in ....
里面自带next
,所以可以不用显式调用next()
。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持以下吧