メモリ消費量を削減するために読み取られるメモリ・セグメント上の出会いは非常に大きなファイルではなく、直接、
# coding: utf-8
# 500G, 特殊, 内容都在一行 以{|}为分隔符隔开 如果一次性读取内存会崩掉 那我们应该怎么解决呢?
def myreadlines(f, newline):
# 声明一个缓存, 存放我们已经读取的数量
buf = ''
while True:
# 查询缓存中的数据是否存在分隔符 40960字符可能有多个分隔符
while newline in buf:
# 如果存在查找分隔符的位置
pos = buf.index(newline)
# yield 从0开始到字符串的位置
yield buf[:pos]
# 重新将buf 赋值为 查找到的字符加上分隔字符的长度 切片至结尾
buf = buf[pos + len(newline):]
# 如果不在读取40960的字符
chuck = f.read(4096*10)
# 如果没有数据文件结尾则跳出循环
if not chuck:
# 读不到的时候 将结尾的buf存放到yield
yield buf
break
# 如果有则添加进入缓存里面
buf += chuck
with open('input.txt') as f:
for line in myreadlines(f, '{|}'):
# 第一个参数为文件 第二个参数为分隔符
print line