【发布时间】: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 中的解释:只需遍历文件,您就可以完成 - 它确实已经流式传输文件的内容了。