NodeJS:如何像Python一样逐行读取文件
在Python中,我们可以以一种非常简洁的方式逐行阅读文件:
with open("filename") as fp: for line in fp: #handle your line
只是好奇在NodeJS / Javascript中是否有类似的方式来实现这一点。
在NodeJS / Javascript中最接近的方式我知道的是:
var fs = require('fs'); var readline = require('readline'); var stream = require('stream'); var instream = fs.createReadStream("filename"); var outstream = new stream; var rl = readline.createInterface(instream, outstream); rl.on('line', function(line) { // handle your line here });
谢谢
德里克
我会build议使用line-by-line
npm
读取大文件非常有用,因为它不会缓冲文件数据。
它在收到数据块时暂停stream,为当前块中的所有行发出事件,保留最后一行的剩余部分。 然后它恢复stream,并将剩余部分与新块合并,并重复该过程。
你可以从这里检查它的源代码
下面是代码片段,例如:
var LineByLineReader = require('line-by-line'), lr = new LineByLineReader('big_file.txt'); lr.on('error', function (err) { // 'err' contains error object }); lr.on('line', function (line) { // pause emitting of lines... lr.pause(); // ...do your asynchronous line processing.. setTimeout(function () { // ...and continue emitting lines. lr.resume(); }, 100); }); lr.on('end', function () { // All lines are read, file is closed now. });
你可以使用我的线阅读器库,如果你喜欢: https : //github.com/bilaloguz/secureWebServer/blob/master/line_reader.js
在我的实验中,对于1百万行文本文件,逐行读取和写入控制台需要218秒,而使用Python118秒(Ubuntu 16.04)。