我正在嘗試使用Node.js獲取特定的行,用於在一個48百萬行文件中進行二分查找,但我不想讀取整個文件記憶。有沒有讓我閱讀3000萬行的功能?我正在尋找類似Python's linecache module的東西。在Node.js中讀取第n行而不讀取整個文件
更新這是如何不同:我想不讀整個文件到內存。這個問題被認爲是重複的,將整個文件讀到內存中。
我正在嘗試使用Node.js獲取特定的行,用於在一個48百萬行文件中進行二分查找,但我不想讀取整個文件記憶。有沒有讓我閱讀3000萬行的功能?我正在尋找類似Python's linecache module的東西。在Node.js中讀取第n行而不讀取整個文件
更新這是如何不同:我想不讀整個文件到內存。這個問題被認爲是重複的,將整個文件讀到內存中。
按照documentation,您可以使用fs.createReadStream(path[, options])
,其中:
選項包括開始和結束值從文件而不是整個文件中讀取字節範圍的。
不幸的是,你必須近似理想的位置/線,但它似乎沒有尋求像節點js函數。
EDIT
上述溶液與已經固定長度線效果很好。
換行符只不過是像所有其他角色多,因此尋找新的線路就像是在尋找與角色一個開始行。
因此,如果你有可變長度的行,唯一可行的方法是一次將它們加載到內存中,並放棄那些你不感興趣的行。
您應該使用模塊從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))
找到該行後,我該如何編輯它?並保存文件! –
的可能的複製[閱讀文件的NodeJS的第N行(HTTP:/ /stackoverflow.com/questions/6394951/read-nth-line-of-file-in-nodejs) –
是的,但是它將整個文件讀取到內存中。我正在尋找一種方法來避免這種情況。 – andrew