在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
});
由于
德里克
答案 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)。