npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

fluent-csv

v1.0.1

Published

Read csv row after row.

Readme

通过流读取csv

读取csv或者xlsx大文件夹,通过流式数据减少内存压力

如果是xlsx,内部会自动转换为csv来处理数据

xlsx读取的代码从这个仓库复制来的: https://github.com/ffalt/xlsx-extract

Usage

  1. 采用文件读取方式处理,支持暂停和恢复
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);
});
  1. 采用文件流和管道处理
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