场景:500G 文件 特殊只有一行,特殊分割符号 {|}
def my_readline(f, newline):
buf = ''
while True:
while newline in buf:
pos = buf.index(newline) # 获取分隔符在 buf 中的位置
# 使用 yield 语句将 buf 中分隔符之前的部分作为一个行的内容生成(yield)出来。
# 这意味着每次调用这个生成器函数时,将返回一个新的行的内容。
yield buf[:pos]
buf = buf[pos + len(newline):] # 将 buf 更新为去掉已经生成的行内容后的剩余部分
# 从文件对象 f 中读取一块数据,每次读取 40960 字节(10倍的默认缓冲区大小)。这是为了提高性能。
chunk = f.read(4096 * 10)
# 检查是否已经读取完整个文件
if not chunk:
yield buf # 如果已经读取完文件(chunk 为空),则将剩余的 buf 作为最后一行内容生成。
break
buf += chunk
# 读取文件
with open('input') as f:
for line in my_readline(f, '{|}'):
print(line)