Node.js:仅部分读取大文本文件

我必须阅读一个非常大的csv文件(> 80MB并且不断增长).

我通常只需要解析文件的最后1%.但是到达那个部分需要几分钟.
有没有办法我才开始在N行读书?
或者我可以从头到尾读取流吗?

我目前正在使用fast-csv来读取文件:

    // convert csv into postgres copy file
    csv.fromPath(filepath, {
        headers: false
    }).transform(function(data) {
        // check if record meets condition 
        var dt = parseInt(data[0]);
        var date = new Date(dt * 1000);
        var mom = moment(date);
        if (mom.isAfter('2014-01-01 00:00')) {  
            // transform data and return object
            return transform(data);
        }
        return null;
    }).pipe(csv.createWriteStream({
        headers: true
    })).pipe(fs.createWriteStream(outpath, {    
        encoding: "utf8"
    })).on('finish', function() { 
        // do postgres import
    });

最佳答案 使用节点
fs.stat,
fs.open,
fs.read的组合,您可以找到文件的大小,只需将最后1%读入缓冲区:

var fs = require('fs');
var filename = 'csv.csv';

fs.stat(filename, function(err, stat) {

    if(err) throw err;

    var bytesToRead = Math.ceil(0.01 * stat.size); // last 1%
    var startingPosition = stat.size - bytesToRead;
    var readBuffer = new Buffer(bytesToRead);

    fs.open(filename, 'r', function(err, fd){

        if(err) throw err;

        fs.read(fd, readBuffer, 0, bytesToRead, startingPosition, 
            function(err, bytesRead){
                if(err) throw err;
                console.log(readBuffer.toString());
            });
    });

});

您无法从N行开始阅读,因为您必须全部阅读以了解换行符的位置.

点赞