如何用python读取一个500G的文本

遇到超大文件,不能直接放在内存中,要分段进行读取 以减少内存的占用

# coding: utf-8

# 500G, 特殊, 内容都在一行  以{|}为分隔符隔开 如果一次性读取内存会崩掉  那我们应该怎么解决呢?


def myreadlines(f, newline):
    # 声明一个缓存, 存放我们已经读取的数量
    buf = ''
    while True:
        # 查询缓存中的数据是否存在分隔符  40960字符可能有多个分隔符
        while newline in buf:
            # 如果存在查找分隔符的位置
            pos = buf.index(newline)
            # yield  从0开始到字符串的位置
            yield buf[:pos]
            # 重新将buf 赋值为 查找到的字符加上分隔字符的长度 切片至结尾
            buf = buf[pos + len(newline):]
        # 如果不在读取40960的字符
        chuck = f.read(4096*10)
        # 如果没有数据文件结尾则跳出循环
        if not chuck:
            # 读不到的时候 将结尾的buf存放到yield
            yield buf
            break
        # 如果有则添加进入缓存里面
        buf += chuck


with open('input.txt') as f:
    for line in myreadlines(f, '{|}'):
        # 第一个参数为文件  第二个参数为分隔符
        print line

猜你喜欢

转载自blog.csdn.net/weixin_34304013/article/details/91000553
今日推荐