Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Node.js中如何逐行读取文件

在Node.js中如何逐行读取文件

作者头像
ccf19881030
发布于 2020-10-29 03:45:31
发布于 2020-10-29 03:45:31
14.6K00
代码可运行
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客
运行总次数:0
代码可运行

在Node.js中如何逐行读取文件

本文翻译自How to read a file line by line in Node.js

能够逐行读取文件为我们提供了一个读取大型文件的机会,而无需将它们完全加载到内存中。 它还允许我们仅查找相关信息,并在找到该信息后停止搜索。

我们已经讨论了如何在Java中逐行读取文件,让我们看一下Node.js逐行读取文件的方式。

FS模块

在Node.js中逐行读取文件的最简单方法是使用本地fs模块fs.readFileSync()方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fs = require('fs');

try {
    // read contents of the file
    const data = fs.readFileSync('file.txt', 'UTF-8');

    // split the contents by new line
    const lines = data.split(/\r?\n/);

    // print all lines
    lines.forEach((line) => {
        console.log(line);
    });
} catch (err) {
    console.error(err);
}

此方法将文件的全部内容同步读取到内存中,然后通过换行符拆分其内容。 乍看起来,它看起来很完美,但是有两个问题:

  • 1.它是阻塞的,这意味着它将阻塞程序的执行,直到将整个文件加载到内存中为止。
  • 2.如果文件很大(千兆字节或更多),将对内存消耗产生严重影响。 通过使用非阻塞版本fs.readFile()可以解决第一个问题,但是在生产环境中,您不需要执行将整个文件读入内存的操作。

但是,如果您只想读取小文件,则可以正常工作。

Readline模块

Readline是另一个Node.js本机模块,是专门为此目的开发的-从任何readable stream中一次读取一行。 您甚至可以使用此模块从命令行读取输入数据。

这是您可以在代码中访问它的方式(无需安装):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const readline = require('readline');

由于readline模块适用于可读流,因此我们必须首先使用fs模块创建流,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const rl = readline.createInterface({
    input: fs.createReadStream('file.txt'),
    output: process.stdout,
    terminal: false
});

现在,我们可以侦听rl对象上的line事件,该事件将在从流中读取新行时触发:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rl.on('line', (line) => {
    console.log(line);
});

完整的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fs = require('fs');
const readline = require('readline');

const rl = readline.createInterface({
    input: fs.createReadStream('file.txt'),
    output: process.stdout,
    terminal: false
});

rl.on('line', (line) => {
    console.log(line);
});

Line-Reader模块

line-reader是一个开源模块,用于在Node.js中逐行读取文件。 您可以通过在终端中运行以下命令将其添加到项目中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm i line-reader --save

如果使用的是yarn,可以通过在终端中运行以下命令将其添加到项目中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ yarn add line-reader

line-reader模块提供了eachLine()方法,该方法读取给定文件的每一行。 它需要一个带有两个参数的回调函数:行内容和一个布尔值,指定读取的行是否为文件的最后一行。 这是一个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const lineReader = require('line-reader');

lineReader.eachLine('file.txt', (line, last) => {
    console.log(line);
});

使用此模块的另一个好处是,当某些情况变为真时,停止读取。 可以通过从回调函数返回false来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const lineReader = require('line-reader');

lineReader.eachLine('file.txt', (line) => {
    console.log(line);

    // stop if line contains `NEW`
    if(line.includes('NEW')) {
        // stop reading and close the file
        return false;
    }
});

LineByLine模块

linebyline是另一个开放源代码库,可用于在Node.js中逐行读取文件。

让我们将其添加到您的项目中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm i linebyline --save

这个包简单地在内部流本机readline模块,读取和缓冲新行,为每行发出一个行事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const readline = require('linebyline');

// read all lines
rl = readline('file.txt');

// listen for `line` event
rl.on('line', (line, lineCount, byteCount) => {
    console.log(line);
}).on('error', (err) => {
    console.error(err);
});
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
美团闪电仓能否破解即时零售的四大困境?
那么,通过什么关键数据指标来明确用户的需求并制定相应的战略和执行方案呢?不同的商业模式存在着差别。
庄帅
2022/07/09
3510
美团闪电仓能否破解即时零售的四大困境?
“新消费”风口下的休闲食品行业,是这样布局的
网红经济是以年轻貌美的时尚达人为形象代表,以红人的品味和眼光为主导,进行选款和视觉推广,在社交媒体上聚集人气,依托庞大的粉丝群体进行定向营销,从而将粉丝转化为购买力的一个过程。
庄帅
2020/06/17
5610
“新消费”风口下的休闲食品行业,是这样布局的
商品分析是什么?该怎么做(入门版)
商品分析曾经是数据分析的最早形态。现代数据分析以及数据模型的大部分思路,都是从这里演化出来的。可能是因为它太过传统,可能是因为互联网公司不需要挣钱养自己,总之,现在介绍商品分析的文章非常少。今天我们就先开个头,简单介绍一下商品分析的基本概念。
接地气的陈老师
2020/06/19
7940
商品分析是什么?该怎么做(入门版)
复工后的消费反弹潮
“疫情过后,我们一起看樱花”、“疫情过后我一定要使劲吃,到处逛”,网上到处都充满了对疫情结束后的种种向往,那么疫情过后究竟会不会掀起消费狂潮?富国大通认为,狂潮不好说,但一定会有一波明显反弹。
庄帅
2020/03/09
5490
复工后的消费反弹潮
响铃:苏宁易购实现逆势增长,但它的非电业务更超出意料
2月26日,苏宁易购在南京举行了“全民焕新节媒体发布会”,在发布会中多次提及苏宁正在打造全场景、全品类的战略思想。
曾响铃
2019/03/18
4090
人货匹配模型没搞懂?互联网行业都在讨论它
多数据分析书本、文章都提过人货场模型,但对于其中最核心的人货如何匹配,没有详细介绍。人货匹配是非常底层的分析理论,涉及到转化率分析、用户分群、推荐算法训练等重要议题,无论互联网的电商、O2O、短视频、直播等产品都会考虑这点。废话不多说,今天详细介绍一下。
接地气的陈老师
2021/07/23
7400
同城零售模型与规模化增长困境
在角色上,同城零售主要还是以同城的零售商和品牌商的实物销售为主;O2O则以餐饮和生活服务的实体店为主;新零售则以零售商的数字化为主。
庄帅
2020/10/13
5320
同城零售模型与规模化增长困境
“宅经济”激活新消费,生鲜电商崛起逻辑
进入2020年,“宅”是第一个主题词。为抗击新冠疫情,全国各地自 1 月 20日以来相继实施较为严格的居家隔离措施,这一过程中生鲜电商的需求随即井喷。
庄帅
2020/04/10
4790
“宅经济”激活新消费,生鲜电商崛起逻辑
洞察|你不在乎的三四线城市,数据却看到了万亿商机
「小镇青年」听上去有些调侃意味。 星巴克、沃尔玛和 711 便利店尚未成为日常关键词,生活 在 比上不足、比下有余的地界。 关于低线城市消费升级的 4 个问题 在外闯荡多年,逢年过节返乡时,你一定听过这样的段子: 北上广深 CBD 里的 Michael 和 Mary,回家就成了亲友口中的狗蛋和翠花,成为标准的小镇青年。 本篇低线城市消费升级报告或许将让你感到意外:三线及以下城市的年轻人,很可能比大都市中的白领阶层拥有更多的可自由支配财产和更高的消费力。 他们不必面对房贷压力,日常开销低,工作压力小,拥有较
灯塔大数据
2018/04/04
2K0
洞察|你不在乎的三四线城市,数据却看到了万亿商机
消费券背后的乘数效应,基于日本消费“世代变迁”的启示
受新冠肺炎疫情影响,提振消费、促活经济是当下各地政府和企业的共同愿望,各界协力施策。
庄帅
2020/04/16
4040
消费券背后的乘数效应,基于日本消费“世代变迁”的启示
互联网金融再掀争夺战:巨头抢筹消费金融
 互联网金融这个时下热门的产业,除了第三方支付、理财、小贷等多个维度外,亦包括生态链条的上下游延伸,而消费金融则成为该产业发展路上的“高地”。   而未来消费金融的发展方向会是什么?目前,互联网巨头们利用所掌握的海量大数据优势,挖掘需求、创新设计新产品则成为大势所趋。   今年,京东商城推出了一项名为“京东白条”的会员增值服务,为符合条件的京东优质会员提供在京东商城“先消费,后付款”的赊购服务。近日,京东消费金融业务高级总监许凌如此指出:“未来消费金融将在扩大用户覆盖面、拓展消费场景上部署,并重点
腾讯研究院
2018/03/13
9130
消费升级里的中国:电商消费大数据勾勒在线商业版图
<数据猿导读> 以互联网经济为代表的新经济,凭借业态先进、较少的流通环节,大大降低了流通成本,由此带动了消费升级,电商成为主流,这股线上大消费热潮的背后,还伴随着全民消费习惯的转变。电商大数据报告带你
数据猿
2018/04/19
7710
消费升级里的中国:电商消费大数据勾勒在线商业版图
从李佳琦、一条到诚品书店,内容带货背后的真相是什么?
走到今天,大的流量红利时代已经过去,内容作为流量的一种新的收纳器,对于品牌和零售的价值正不断提升。
浪潮新消费
2020/12/23
4160
直播电商“人、货、场”的解读和趋势预测
直播电商的产业链环节包括平台、用户、主播、MCN 机构、供应链、品牌方、内容电商整合营销机构和服务支持共 9 个环节。
庄帅
2020/05/09
1.3K0
崛起or阵亡?数据新玩法教你打好新零售之仗
大数据如何赋能新零售?DT君上周请到了《新零售:吹响第四次零售革命的号角》一书的作者范鹏老师,从新零售的诞生、商业模式的分析、到真实案例的探讨,让你看懂新零售的本质。本文为嘉宾的直播实录整理,感兴趣的朋友不要错过哦~
DT数据侠
2018/09/21
6040
崛起or阵亡?数据新玩法教你打好新零售之仗
指标体系构建-03-交易型的数据指标体系
人货场模型搭建 有了三个维度的基础理解,就能用来综合解释问题。回到开头的“生鲜电商复购率低”的问题。可以先从人货场角度建立分析假设:
IT从业者张某某
2023/12/25
4680
指标体系构建-03-交易型的数据指标体系
B2B快消品传统通路亟待数字化赋能激活,打通高效营销链路
快消品顾名思义就是快速消费品,主要包括食品、个人卫生用品、烟酒、饮料等使用寿命较短的产品,因此快消品的使用迭代周期会更快,高频次和易重复的使用率通过拉动消耗,维持市场规模化的产需扩张。
盈鱼MA
2021/03/11
6590
B2B快消品传统通路亟待数字化赋能激活,打通高效营销链路
研究了每日优鲜和叮咚买菜后,我总结出生鲜电商的两个盈利模型和盈利公式
国内生鲜电商市场规模增长迅速。根据艾瑞咨询数据,截至2018年底生鲜电商市场规模已经达到2045亿,2013~2018年复合增长率高达74%。
庄帅
2020/03/31
1.1K1
研究了每日优鲜和叮咚买菜后,我总结出生鲜电商的两个盈利模型和盈利公式
AARRR模型的使用注意事项【防坑提醒】
在面试的时候,被问到:你如何搭建分析思路,很多同学脱口而出:我用AARRR模型。这么回答本身没什么问题,可后续的解释却经常漏洞百出,甚至犯一些原则性的错误,今天系统性解答一下,到底AARRR适合干什么,不适合干什么。
接地气的陈老师
2019/12/09
6860
【干货】新消费品冷启动的三板斧
大家好,我是白蓓,感谢泛零售小圆桌的信任和邀请,今天,我给大家分享近期关于“新品牌如何完成冷启动”的一些观察和实践。
iCDO互联网数据官
2020/02/26
1.2K0
【干货】新消费品冷启动的三板斧
推荐阅读
相关推荐
美团闪电仓能否破解即时零售的四大困境?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验