簡體   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