背景
有一个100G 的文本文件,内容只有一行,内容间用 {|} 这样的字符串分割,目前需要读取里面的配置信息。
文件内容示例
abc=123{|}ccc=345{|}config_file_name="test.conf"{|}eii=432
困难
无法直接一次性的读入内存,电脑会奔溃,同时也无法一行一行的读取,因为文件只有一行;
解决思路
使用生成器,依次去迭代读出,可以避免将计算机主机消耗殆尽
解决方案
# 定义自己的读取文件的函数
# f是文件,newline是分隔符
def myreadlines(f, newline):
buf = ""
while True:
# 因为不知道文件内容多长,可能分割符有多个
while newline in buf:
pos = buf.index(newline)
yield buf[:pos]
buf = buf[(pos + len(newline)):]
# 使用文件的read函数,读取4096*10个字符
chunk = f.read(4096*10)
# 退出的条件,是读取不出来内容了
if not chunk:
yield buf
break
buf += chunk
if __name__=='__main__':
with open('myfile.txt','r') as f:
for line in myreadlines(f, '{|}'):
print(line)
[out]:
abc=123
ccc=345
config_file_name="test.conf"
eii=432