【问题标题】:How to cleverly read big file in chunks? [duplicate]如何巧妙地分块读取大文件? [复制]
【发布时间】:2019-10-21 02:19:16
【问题描述】:

我有一个非常大的文件(~10GB),我想完整地阅读它。为了实现这一点,我把它切成块。但是,我在将大文件切割成可利用的部分时遇到了麻烦:我希望将数千行放在一起而不让它们在中间分开。我在这里找到了一个我已经安排的功能:

def readPieces(file):
    while True:
        data = file.read(4096).strip()
        if not data:
            break
        yield data

with open('bigfile.txt', 'r') as f:
    for chunk in readPieces(f):
        print(chunk)

我可以指定我想要读取的字节(这里是 4MB),但是当我这样做时,我的行会在中间被切断,如果我删除它,它会读取导致进程停止的大文件。我怎样才能做到这一点? 此外,我文件中的行大小不相等。

【问题讨论】:

  • 如果要逐行读取文件,只需使用for line in open('bigfile.txt'):。它包含很多自动魔法。
  • 如果你真的想自己实现这个,你可以(在readPieces中)在最后一个换行符处拆分块,将第二部分保留在缓冲区中并且只产生第一部分。然后在下一次迭代中,将新块添加到缓冲区,冲洗,起泡,重复(并且不要忘记产生剩余的缓冲区 - 如果不是空的 - 一旦你用尽了文件)。但是仅使用内置的行缓冲读取(如 dup 中所述)肯定更简单、更有效 xD
  • @brunodesthuilliers 是的,事实上这就是我的目标:像流一样读取我的大文件
  • @ooj-001 以及此处和 dup 中的解释:只需遍历文件,您就可以完成 - 它确实已经流式传输文件的内容了。

标签: python file


【解决方案1】:

以下代码逐行读取文件,前一行被垃圾回收。

with open('bigfile.txt') as file:
  for line in file:
    print(line)

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    相关资源
    最近更新 更多