当前位置: 首页 > 面试题库 >

在node.js中一次读取一行文件?

农星华
2023-03-14
问题内容

我正在尝试一次读取一行大文件。我在Quora上发现了一个与该主题有关的问题,但我缺少一些联系以使整个组件组合在一起。

 var Lazy=require("lazy");
 new Lazy(process.stdin)
     .lines
     .forEach(
          function(line) { 
              console.log(line.toString()); 
          }
 );
 process.stdin.resume();

我想弄清楚的一点是,如何一次从文件而不是如本示例中的STDIN读取一行。

我试过了:

 fs.open('./VeryBigFile.csv', 'r', '0666', Process);

 function Process(err, fd) {
    if (err) throw err;
    // DO lazy read 
 }

但它不起作用。我知道,在紧急情况下,我可能会转而使用PHP之类的东西,但是我想弄清楚这一点。

我不认为其他答案会起作用,因为该文件比我在其上运行的具有内存的服务器大得多。


问题答案:

从Node.js v0.12和Node.jsv4.0.0开始,有一个稳定的readline核心模块。这是从文件中读取行的最简单方法,而无需任何外部模块:

const fs = require('fs');
const readline = require('readline');

async function processLineByLine() {
  const fileStream = fs.createReadStream('input.txt');

  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity
  });
  // Note: we use the crlfDelay option to recognize all instances of CR LF
  // ('\r\n') in input.txt as a single line break.

  for await (const line of rl) {
    // Each line in input.txt will be successively available here as `line`.
    console.log(`Line from file: ${line}`);
  }
}

processLineByLine();

或者:

var lineReader = require('readline').createInterface({
  input: require('fs').createReadStream('file.in')
});

lineReader.on('line', function (line) {
  console.log('Line from file:', line);
});

即使没有final,也可以正确读取最后一行(从Node v0.12或更高版本开始)\n

更新
:此示例已添加到Node的API官方文档中。



 类似资料:
  • 字符串表[]=新字符串[100];

  • 问题内容: 我需要一次最多读取N行来读取一个大文件,直到EOF。在Python中最有效的方法是什么?就像是: 问题答案: 一种解决方案是列表理解和分片运算符: 在这之后是行的元组。但是,这会将整个文件加载到内存中。如果您不希望这样做(即文件可能真的很大),则可以使用生成器表达式和itertools包中的另一种解决方案: 是一个生成器对象,它为您提供文件的每一行,并且可以在这样的循环中使用: 两种解

  • 问题内容: 我正在尝试在Python中多次读取某些文件的行。 我正在使用这种基本方式: 一切正常,但是如果我想在文件仍处于打开状态的情况下每行第二次进行迭代,例如: 然后它不起作用,我需要打开,然后关闭,然后再次打开我的文件以使其正常工作。 感谢您的回答! 问题答案: 使用file.seek()跳到文件中的特定位置。但是,请考虑是否真的有必要再次浏览该文件。也许有更好的选择。

  • 问题内容: 是否有比从Python中的文件一次读取第二行更好的方法呢? 我在2.5.4中。较新版本有何不同? 编辑:删除的答案指出:在py3k中,您需要执行next(f)而不是f.next()。更不用说打印更改 问题答案: import itertools las,需要Python 2.6或更高版本;2.5仅具有,如果有奇数行,它将截断最后一行。当然,提供与生成器相同的功能非常容易。 这是一个更一

  • 问题内容: 我想将文件读入Java的String中,一次x个字符。然后,我将对字符串进行某些操作,并希望从我中断的地方继续。我该怎么办? 编辑: 目标文件是一个简单的文本文件。 问题答案: 好吧,首先您需要区分 字节 和 字符 。您可以一次从一定数量的字节中读取(作为最大数量;不能保证您将获得所需的所有字节),并且一次可以读取多个字符(再次,最大)。 听起来您 可能 想要在周围使用,指定适当的字符