用生成器读取文件

背景

有一个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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值