在Node.js中读取第n行而不读取整个文件

时间:2016-01-11 20:35:26

标签: node.js file

我正在尝试使用Node.js在4800万行文件中获取二进制搜索的特定行,但我不想将整个文件读取到内存中。是否有一些功能让我阅读,比如3000万行?我正在寻找像Python's linecache module这样的东西。

更新如何不同:我不想将整个文件读取到内存中。这个被识别为重复的问题将整个文件读取到内存中。

2 个答案:

答案 0 :(得分:3)

根据documentation,您可以使用fs.createReadStream(path[, options]),其中:

  

选项可以包含开始结束值,从文件中读取读取字节范围,而不是整个文件。

不幸的是,你必须近似所需的位置/线,但它似乎没有像节点js中的 seek 那样的函数。

修改

上述解决方案适用于具有固定长度的行。

新行字符只不过是与其他字符一样的字符,因此寻找新行就像查找以字符 a 开头的行。
因此,如果你有可变长度的行,唯一可行的方法是在内存中一次加载一个并丢弃那些你不感兴趣的行。

答案 1 :(得分:1)

您应该使用Node’s standard library中的readline模块。我在项目中处理了30-40万行文件,这很有用。

如果您想以较不详细的方式执行此操作,并且不介意使用第三方依赖项nthline package

const nthline = require('nthline')
    , filePath = '/path/to/100-million-rows-file'
    , rowNumber = 42

nthline(rowNumber, filePath)
  .then(line => console.log(line))