Python 在超时的情况下逐行读取文件是否需要花费太长的时间?

Python 在超时的情况下逐行读取文件是否需要花费太长的时间?,python,perl,Python,Perl,我有一个1.2TB的文件,我正在对其运行一些代码,但经常遇到OutOfMemoryError异常。我对该文件运行了以下两段代码,以查看错误: import sys with open(sys.argv[1]) as f: count = 1 for line in f: if count > 173646280: print line else: print count

我有一个1.2TB的文件,我正在对其运行一些代码,但经常遇到
OutOfMemoryError
异常。我对该文件运行了以下两段代码,以查看错误:

import sys

with open(sys.argv[1]) as f:
    count = 1
    for line in f:
        if count > 173646280:
            print line
        else:
            print count
            count += 1
该代码:

#!/usr/bin/env perl
use strict;
use warnings;

my $count = 1;
while (<>) {
    print "$count\n";
    $count++;
}
#/usr/bin/env perl
严格使用;
使用警告;
我的$count=1;
而(){
打印“$count\n”;
$count++;
}
它们都会变焦,直到碰到173646264线,然后完全停止。让我简单介绍一下这个文件的背景

我创建了一个名为
groupBy.json
的文件。然后,我用一些Java代码处理该文件以转换JSON对象,并创建了一个名为
groupBy_new.JSON
的文件。我将
groupBy_new.json
放在s3上,在另一台服务器上取下它,并在它上进行一些处理,这时我开始出现OOM错误。我想可能是文件在传输到s3时损坏了。我在
groupBy_new.json
上运行了上面的Python/Perl代码,这两个代码都在同一行停止。我在原始文件
groupBy.json
上运行了上面的Python/Perl代码,它也停止了。我试图用最初创建它时使用的代码重新创建
groupBy_new.json
,但遇到了一个OOM错误


所以这是一个非常奇怪的问题,困扰着我。简而言之,我想摆脱这条给我带来麻烦的线路。我要做的是读取一个文件,在读取的行上有一个超时。如果它无法在2秒钟左右的时间内读取输入行,请转到下一行。

您可以做的是计算行数,直到问题行出现并输出它-确保刷新输出-请参阅。然后编写另一个程序,将这些行中的第一行复制到另一个文件中,然后逐字符读取文件的输入流(请参见),直到它遇到“\n”,然后逐行或分块复制文件的其余部分。

如果该行上有OOM,然后,该行可能很长,无法加载到内存中(许多GB?取决于您的机器)。你不能只跳过这一行,因为要跳过这一行,我们需要知道这一行的终点,而不必阅读这一行。作为一种解决方法,您可能需要将文件读入固定大小的缓冲区并执行自己的行拆分。我运行此操作的系统具有64GB内存,我将堆大小设置为30GB。我现在将输入文件拆分为更小的块。希望这能奏效。如果没有,我将尝试在更大的系统上运行代码。