NodeJS:如何在Python中逐行读取文件

时间:2015-11-10 05:38:54

标签: javascript node.js

在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
}); 

由于

德里克

2 个答案:

答案 0 :(得分:2)

我建议使用line-by-line npm

它对于读取大文件很有用,因为它不会缓冲文件数据。

它在收到数据块时暂停流,为当前块中的所有行发出事件,保留最后一行的剩余部分。然后它恢复流并将剩余部分与新块合并并重复该过程。

您可以从here

查看源代码

下面是代码段,例如:

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.
});

答案 1 :(得分:0)

如果您愿意,可以使用我的线路阅读器库:https://github.com/bilaloguz/secureWebServer/blob/master/line_reader.js

在我的实验中,对于100万行文本文件,逐行读取和写入控制台花了218秒用Python,111秒用Nodejs(Ubuntu 16.04)。