其实本质还是在于yield函数的使用,代码如下:
# 逐行读取
def read_big_file(fpath):
with open(fpath,"r",encoding="utf8") as f:
while True:
line = f.readline()
if not line:
break
yield line
# 应该很少有人直接用read确认读取多少字节吧
def read_big_file(fpath):
BLOCK_SIZE = 1024
with open(fpath, 'rb') as f:
while True:
block = f.read(BLOCK_SIZE) #其实就是换这句就可以了
if not block:
yield block
if __name__=="__main__":
a=read_big_file("knowledge/Knowledge_1215133704.txt")
for i in range(20):
print(f"{i}\t{next(a).strip()}")
输出结果如下(字段之间用\n
隔开了,行之间使用\n
隔开):
0 != 中文名 不等于
1 != 属性 编程语言用符号
2 != 意思 数/变量 不等于 另一个 数/变量
3 !DOCTYPE 中文名 !文档类型
4 !DOCTYPE 外文名 DOCument TYPE
5 !DOCTYPE 外语缩写 !DOCTYPE
6 !DOCTYPE 类型 文档类型声明
7 "131"领军人才 中文名 “131”领军人才
8 "131"领军人才 人才工程 山西省高等学校131领军人才工程
9 "131"领军人才 别名 131领军人才
10 "131"领军人才 实施办法 山西省高等学校131领军人才工程实施办法
11 "523"任务与青蒿素研发访谈录 ISBN 9787553929231
12 "523"任务与青蒿素研发访谈录 丛书 20世纪中国科学口述史
13 "523"任务与青蒿素研发访谈录 书名 “523”任务与青蒿素研发访谈录
14 "523"任务与青蒿素研发访谈录 作者 屠呦呦,罗泽渊,李国桥,张剑方,吴滋霖,施凛荣等口述/黎润红访问整理
15 "523"任务与青蒿素研发访谈录 出版时间 2015-11
16 "523"任务与青蒿素研发访谈录 出版社 湖南教育出版社
17 "523"任务与青蒿素研发访谈录 定价 85.00元
18 "523"任务与青蒿素研发访谈录 装帧 平装
19 "523"任务与青蒿素研发访谈录 页数 485
参考:
- 面试题-python 如何读取一个大于 10G 的txt文件?
- stack overflow:Misunderstood python yield