Node.js:只读部分文本文件

我必须阅读一个非常大的csv文件(> 80MB和增长)。

我通常只需要parsing文件的最后1%。 但是到那个部分需要几分钟。 有没有办法让我只在N线开始阅读? 或者,我还可以从头到尾读取stream?

我目前正在使用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.statfs.openfs.read ,你可以find文件的大小,只读最后的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行开始阅读,因为你必须全部阅读才能知道换行符在哪里。