繁体   English   中英

逐行读取文件,超时时间太长?

[英]Reading a file line-by-line with a timeout for lines that are taking too long?

我有一个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++;
}

他们两个都放大,直到达到173,646,264行,然后才完全停止。 让我简要介绍一下该文件的背景。

我创建了一个名为groupBy.json的文件。 然后,我使用一些Java代码处理了该文件以转换JSON对象,并创建了一个名为groupBy_new.json的文件。 我将groupBy_new.json放在s3上,将其拉到另一台服务器上,并且当我开始收到OOM错误时正在对其进行一些处理。 我认为传输到s3时文件可能已损坏。 我在serverA(它最初所在的服务器)和serverB(我从中将文件从s3中拉出的服务器)上的groupBy_new.json上运行了上面的Python / Perl代码,它们都在同一行停止了。 然后,我在原始文件groupBy.json上运行了上面的Python / Perl代码,它也停止了运行。 我试图用与最初创建它时相同的代码重新创建groupBy_new.json ,但遇到了OOM错误。

所以这是一个让我感到困惑的真正奇怪的问题。 简而言之,我想摆脱引起我麻烦的那条线。 我想要做的是读取一个文件,该文件在正在读取的行上具有超时。 如果它在2秒钟左右的时间内无法读取输入行,请移至下一行。

您可以做的是计数直到问题行的行数并输出-确保刷新输出-请参阅https://perl.plover.com/FAQs/Buffering.html 然后编写另一个程序,将这行的第一行复制到另一个文件,然后逐个字符读取文件的输入流(请参阅http://perldoc.perl.org/functions/read.html ),直到命中为止一个“ \\ n”,然后复制文件的其余部分-逐行或大块复制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM