javascript - Node.js Readline 未写入输出文件
问题描述
背景
我正在尝试逐行读取几个 GB 大小的文件。我想处理每一行,然后将其写入文件。我不想(也不能)把一切都记在心里。
重要的是,我读取一行的顺序就是我将它写入文件的顺序。
代码
为此,我尝试使用 Node.js Readline 接口
const fs = require( "fs" ),
readline = require( "readline" );
const readStream = fs.createReadStream( "./logs/report.csv" );
const writeStream = fs.createWriteStream( "./logs/out.csv", { encoding: "utf8"} );
const rl = readline.createInterface({
input: readStream,
output: writeStream,
terminal: false,
historySize: 0
});
rl.on( "line", function(line) {
//Do your stuff ...
const transformedLine = line.toUpperCase();
console.log(transformedLine);
//Then write to outstream
rl.write(transformedLine );
});
问题
如您所见,我正在尝试读取一行,对其进行解析,然后将其写入一个名为out.csv
.
问题是输出文件总是空的。没有任何东西被写入其中。
我已经阅读了所有的方法、事件和选项,但显然我遗漏了一些东西。
问题
为什么这段代码没有写入文件?
解决方案
回答
使用当前代码,我实际上又在喂食Readline
。transformedLine
这不是我想要的。我应该做的是直接写到writeStream
.
rl.on( "line", function(line) {
console.log(line);
//Do your stuff ...
const transformedLine = line.toUpperCase();
console.log(transformedLine);
//Then write to outstream
writeStream.write( transformedLine );
});
这将产生一个符合输入顺序的输出文件。
有关流机制和内部缓冲区的更详细讨论,请参见:
推荐阅读
- python - 如何在 Python 中设置 Visual Studio 测试特征?
- python-3.x - 写入文件时jupyter笔记本缓冲区直到关闭?如何在不关闭 jupyter notebook 的情况下查看结果?
- python - 如果列表中的某些值匹配,如何创建一个新列(类似于 get dummies)
- ios - iOS Swift Mi Scale 2 蓝牙 称重
- ios - SwiftUI 2个问题但很简单,关于searchBar和list的backgroundImage
- arrays - 未能在 Mongo 中正确执行更新
- c# - 是否可以在 C# XML 文档中引用 const 字段的值?
- python - 可以在没有“返回 Send_file”的情况下调用 Send_File 吗?
- python - 如何设置我的 mainWindow 的 sizePolicy?
- python - 在抽象基类中定义 @property.setter 会产生 AttributeError