用生成器读取文件

背景

有一个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

你可能感兴趣的:(python,菜鸟练习)