2016-01-11 122 views
2

我正在嘗試使用Node.js獲取特定的行,用於在一個48百萬行文件中進行二分查找,但我不想讀取整個文件記憶。有沒有讓我閱讀3000萬行的功能?我正在尋找類似Python's linecache module的東西。在Node.js中讀取第n行而不讀取整個文件

更新這是如何不同:我想不讀整個文件到內存。這個問題被認爲是重複的,將整個文件讀到內存中。

+1

的可能的複製[閱讀文件的NodeJS的第N行(HTTP:/ /stackoverflow.com/questions/6394951/read-nth-line-of-file-in-nodejs) –

+1

是的,但是它將整個文件讀取到內存中。我正在尋找一種方法來避免這種情況。 – andrew

回答

3

按照documentation,您可以使用fs.createReadStream(path[, options]),其中:

選項包括開始結束從文件而不是整個文件中讀取字節範圍的。

不幸的是,你必須近似理想的位置/線,但它似乎沒有尋求像節點js函數。

EDIT

上述溶液與已經固定長度線效果很好。

換行符只不過是像所有其他角色多,因此尋找新的線路就像是在尋找與角色一個開始行。
因此,如果你有可變長度的行,唯一可行的方法是一次將它們加載到內存中,並放棄那些你不感興趣的行。

+0

任何想法如何做到這一點與可變的行長? – andrew

+1

uhm,不,在這種情況下,我懷疑你必須逐行讀取文件,並丟棄那些你不感興趣的行。 – skypjack

+0

我已經有一個程序可以做到這一點。我正在尋找優化。 – andrew

1

您應該使用模塊從Node’s standard library。我在我的項目中處理30-40萬行文件,這很好。

如果你想要做的是,在一個更簡潔的方式,不介意使用第三方的依賴使用nthline package

const nthline = require('nthline') 
    , filePath = '/path/to/100-million-rows-file' 
    , rowNumber = 42 

nthline(rowNumber, filePath) 
    .then(line => console.log(line)) 
+0

找到該行後,我該如何編輯它?並保存文件! –

相關問題