使用Node.js讀取大型檔案
我最近面臨了分析由日誌文件組成的大數據集的任務。當我試圖在Excel中打開這個文件時,我的筆記本電腦簡直凍結了。鑑於可用工具的限制,我決定使用Node.js腳本解析該文件。
問題
要讀取一個小文件,你可能會使用以下腳本:
var fs = require("fs")
fs.readFile("path/mySmallFile.txt", "utf-8", (err, data) => {
if (err) {
throw err
}
console.log(data)
})
使用此腳本,你應該能夠讀取小文件的內容。然而,對於大文件,你可能會遇到緩存錯誤,例如 RangeError: 嘗試分配的緩衝區大於最大大小。該腳本將終止,產生類似於以下的錯誤:
Error: "toString" failed
at stringSlice (buffer.js)
at Buffer.toString (buffer.js)
at FSReqWrap.readFileAfterClose [as oncomplete]
解決方案
要讀取一個大文件,你可以像這樣使用Node.js的本地 readline
庫:
var fs = require("fs")
var readline = require("readline")
const rl = readline.createInterface({
input: fs.createReadStream("path/largeFile.csv"),
output: process.stdout,
terminal: false,
})
rl.on("line", line => {
console.log(line)
})
rl.on("pause", () => {
console.log("Done!")
})
將文件路徑替換為你的大文件的路徑。在 on('line')
函數內部,你可以逐行處理文件,例如將其解析為JSON並增加計數器。完成閱讀文件後,可以使用 on('pause')
函數顯示最終總和。
使用這種方法,你現在應該能夠使用Node.js處理大量數據集。有關更多信息,請參閱官方文檔:Node.js 讀取API。