在Python中处理大文本文件

时间:2011-06-29 10:37:29

标签: python

基础知识是我需要每行处理4gig文本文件。

使用.readline()或f中的行很适合内存,但需要很长时间才能使用IO。想要使用像yield这样的东西,但是(我认为)会破坏线条。

可能的答案:

file.readlines([sizehint])¶
Read until EOF using readline() and return a list containing the lines
     因此阅读。如果是可选的sizehint   参数存在,而不是   阅读EOF,全线   总计近似sizehint字节   (可能在四舍五入到之后   读取内部缓冲区大小)。   实现文件类的对象   界面可以选择忽略   sizehint如果无法实现,   或无法有效实施。

没意识到你能做到这一点!

3 个答案:

答案 0 :(得分:7)

您可以遍历文件对象:

with open("filename") as f:
    for line in f:
        whatever

这将进行一些内部缓冲以提高性能。 (请注意,file.readline()将执行相当差的因为它不缓冲 - 这就是为什么你不能将文件对象与file.readline()混合在一起的原因。)

答案 1 :(得分:0)

如果你想在每行上做一些事情,你可以循环遍历文件对象:

f = open("w00t.txt")
for line in f:
    # do stuff

然而,按行进行操作可能是性能的实际瓶颈,所以也许您应该使用更好的块​​大小?你可以做的是,例如,读取4096字节,找到结束\n的最后一行,处理该部分并将剩下的部分添加到下一个块。

答案 2 :(得分:0)

你总是可以把线条组合起来?我的意思是为什么打开一个文件并在你可以打开同一个文件6次并迭代时一直迭代。 e.g。

a #is the first 1024 bytes
b #is the next 1024
#etcetc
f #is the last 1024 bytes

每个文件句柄在一个单独的进程中运行,我们开始烹饪燃气。请记住正确处理行结尾。