Python读取大文件

作者: 威猛的小老虎i | 来源:发表于2020-11-29 21:38 被阅读0次

参考bobby python高级编程 第八章

通常做法

  1. 使用f.read()读取全部数据,但是对于大文件会memory error
  2. 使用按行读取的方式,实际上也会造成内存溢出
    • for line in f.readlines() 将数据存到list中

    •  while True:
           line = f.readline()
           if not line:
               break
      
    • while True:
        chunk = f.read(1024)
        if not chunk:  #表示读取到文件末尾了
            break
      

      使用read(size)的形式,指定每次读取的长度

Pythonic 的方法

with open(filename, 'rb') as f:
    for line in f:
        <do something with the line>

对可迭代对象 f,进行迭代遍历:for line in f,会自动地使用缓冲IO(buffered IO)以及内存管理,而不必担心任何大文件的问题。

  • 这样做仅限于读取多行的大文件,如果大文件仅有一行还是会出现内存溢出的问题

新学的方法

  • 利用read(size)的方式每次读取size个字符,同时假定一行大文件有固定的分隔符
def my_readlines(f, new_line):
    buf = ''  # 缓存每次读取的数据和 上一次读取数据分隔符后的剩余数据
    while True:
        while new_line in buf: # 判断分隔符是否出现在缓存数据中
            pos = buf.index(new_line)  # 找到分隔符的位置
            yield buf[:pos]
            buf = buf[pos + len(new_line):]
        chunk = f.read(4096*10)
        if not chunk:  # 读到了文件结尾
            yield buf   # yield最后一个分隔符后面的数据
            break
        buf += chunk

with open('test.txt', 'rb', encoding='utf-8') as f:
    for line in my_readlines(f, '#'):
        print(line)

Reference

  1. How to read large file, line by line in python

相关文章

  • python 读取大文件,避免内存溢出

    ####python读取大文件 最近在学习python的过程中接触到了python对文件的读取。python读取文...

  • python读取大文件

    我们在处理小的文本文件时一般使用.read()、.readline() 和 .readlines()方法,但是当我...

  • python读取大文件

  • python读取大文件

    对可迭代对象 f,进行迭代遍历:for line in f,会自动地使用缓冲IO(buffered IO)以...

  • Python 读取大文件

  • Python读取大文件

    在工作中,我们常会遇到一个很大的文件(通常为log文件),当出现问题的时候,我们想使用程序来处理日志文件来对问题进...

  • python 读取大文件

    方法1: 方法2: 推荐方法2,方法2不会把整个文件读入内存,是一种迭代器的读取方法。方法1,会把整个文件load...

  • Python读取大文件

    参考bobby python高级编程 第八章 通常做法 使用f.read()读取全部数据,但是对于大文件会memo...

  • python面试题(2018)

    1.python中大文件是如何读取的? (1)读取几个G的文件时,可以利用生成器generator。 (2)rea...

  • 文本/数据操作

    大文件读取 json 中文编码问题: 排序: url中文转码(python3) csv 文件操作模式 xml lx...

网友评论

    本文标题:Python读取大文件

    本文链接:https://www.haomeiwen.com/subject/shxlwktx.html