如何使用 nodejs 删除本地文件前 1000 行内容?

2017-04-05 18:41:21 +08:00
 HanningWu

我是一个 nodejs 新手,由于某种原因必须利用 nodejs 简单快速地写一个处理文件内容的小小 app 。我看过 nodejs documentation ,有些懵逼,所以偷个懒来 V 站问一下大家。。

目的是想读取一个包含超多行数的文件,并对每一行内容做一些操作。如果全部读取的话内存不够,打算用一个循环去读取文件内容,每次读 1000 行,对这 1000 行数据进行一些处理之后,删除原文件前 1000 行内容,保证下一次循环不重复读取内容。

有没有人能告诉我删除本地文件的前 1000 行在 nodejs 中该如何实现

PS. 我试过 nodejs 的 readStream 模块去一行一行地读取。但是这个方法有一些小毛病,我不想考虑了。如果可以的话,能帮忙解决一下我问的上一个问题也可:请问如何使用 nodejs 的 readline 模块按行读取文件内容然后依次更新到 html 页面中?

PS 的 PS. 如果能用 shell script 做是超简单的,一个 sed -i '1,1000d' filename.txt 就搞定了,然而不得不用 nodejs。。

5431 次点击
所在节点    Node.js
31 条回复
HanningWu
2017-04-06 00:36:53 +08:00
@newdongyuwei 最终,是需要实现这样一个效果,示例代码: https://jsfiddle.net/09kuyn7v/ 。但不是像这个示例中那样,数据从数组中来,我需要的是从文件每一行读取出来,然后以同样的效果通过点击按钮显示到 html 的一个段落中去。
param
2017-04-06 08:35:29 +08:00
@cxbig 为什么 Mac 多个双引号,是干嘛的
HanningWu
2017-04-06 08:44:41 +08:00
@param 那不是双引号,是两个单引号,用来备份 -i 直接修改的文件。比如你利用 sed -i '.bak' '1,100d' filename.txt 命令去删除 filename.txt 的前 100 行,中端会先备份文件为 filename.txt.bak
HanningWu
2017-04-06 08:45:35 +08:00
@param 单引号内放空,看起来像双引号时就不备份
HanningWu
2017-04-06 10:47:00 +08:00
@newdongyuwei 那看是怎么“轻松处理”,我的确可以用 readStrem 来读文件,但是我遇到的问题是读取文件之后无法**动态地依次**显示到 html 页面中去!
cxbig
2017-04-06 16:55:30 +08:00
@param 那是两个单引号,这个参数是用来定义重命名后缀的, 23 楼已说明
当你想直接写回原文件的时候, Linux 只写 -i 就好, Mac 下必须要带空字符串当参数,不然报错
IJustmaogepao
2017-04-06 17:17:45 +08:00
我的想法是可以用 readFile 读出来,再用 split('\n')切割成数组,然后去掉前 1000 个元素。。
123s
2017-04-06 18:47:17 +08:00
@IJustmaogepao 发文件就坑了
123s
2017-04-06 18:47:27 +08:00
大文件
WXYOO1
2017-04-07 20:01:54 +08:00
推荐使用 line-reader 这个包 直接读行,前 1000 行不处理,后面开始写入新文件
```
var lineReader = require('line-reader');

lineReader.eachLine('file.txt', function(line, last) {
console.log(line);
});
```
HanningWu
2017-04-07 21:45:37 +08:00
@WXYOO1 这个包读取文件是同步的还是异步的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/352731

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX