1.0.1 • Published 16 days ago
fluent-csv v1.0.1
通过流读取csv
读取csv或者xlsx大文件夹,通过流式数据减少内存压力
如果是xlsx,内部会自动转换为csv来处理数据
xlsx读取的代码从这个仓库复制来的: https://github.com/ffalt/xlsx-extract
Usage
- 采用文件读取方式处理,支持暂停和恢复
import { StreamCSV } from "fluent-csv";
const csvFile = '/file/example.csv'; // csv格式最佳,但是也可以使用xlsx文件
const stream = new StreamCSV({
file: csvFile,
rowCount: 5, // 每次返回5行
skipCount: 10, // 跳过文件起始前10行
}).read().on('data', list => {
stream.pause(); // 暂停流读取
// list 是数组,返回csv中的5行
console.log(list)
// 可在这里处理一些任务
setTimeout(() => {
stream.resume(); // 恢复流读取
}, 5000);
});
- 采用文件流和管道处理
import { StreamCSV } from "fluent-csv";
import { createReadStream, createWriteStream } from "node:fs";
createReadStream('/file/example.csv')
.pipe(StreamCSV.transform(async ([row], destroy) => {
// row 是读取到的csv行数据,是字符串数组
// destroy 是终止函数,可随时终止流读取和写入
// 在这里可以异步处理row数据
const newRwo = [
[..row, 'add more data'],
]
return [newRow] // 处理完成后需要将行数据返回
}))
.pipe(createWriteStream('/file/processed.csv'));
// xlsx也支持,但是xlsx内存占用大,不推荐
createReadStream('/file/example.xlsx')
.pipe(StreamCSV.transform(async ([row], destroy) => {
// row 是读取到的csv行数据,是字符串数组
// destroy 是终止函数,可随时终止流读取和写入
// 在这里可以异步处理row数据
const newRwo = [
[..row, 'add more data'],
]
return [newRow] // 处理完成后需要将行数据返回
}, {
isXLSX: true, // 需要在这里标记这是在处理xlsx
}))
.pipe(createWriteStream('/file/processed.csv'));
其他
依赖node-expat,安装可能因为网络问题报错,可以手动安装
NODEJS_ORG_MIRROR=https://registry.npmmirror.com/-/binary/node/ npm install node-expat