python生成器实现大文件读取
python读取文件其实很容易,可是如果文件过于庞大内存是做不到的。
小的文件用简单的for 循环同样也是做不到的
同样 简单的readlines也是不行的
现在我们来学习一个重要的知识点
read(n)
read函数里面可以加数字 ,每次读取n个字节
例如
read(4096)
意味着每次读取4096个字节
f = open()
f.read(4096)
f.read(4096)
而且这样每次都会从提取到的最后一个字符往下数
Ok,那我们现在来实现这个生成器
#读取大文件
def readmylines(f,mewline):
buf = ""
while True:
while newline in buf:
pos = buf.index(newline)#找到字符的位置
yield buf[:pos]
buf = buf[pos+len(newline):]
chunk = f.read(4096*5)#读取相应的字符长度
if not chunk:
#说明已经读到文件结尾
yield buf
break
buf += chunk
with open("input.txt")as f:
#假设以||分割段落
for line in readmylines(f,'||'):
print(line)