You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Deno中使用BufReader导入竖线分隔的文本文件?

问题分析与解决

你的代码返回空数组主要有两个核心原因:

1. std库版本不兼容

你使用的csv.parse是std@0.82.0版本,而BufReader是std@0.166.0版本,两个版本跨度极大,API接口存在不兼容问题,旧版的parseCsv无法正确处理新版BufReader的输入流。

2. 大文件解析方式错误

针对大文件,新版std/csv的parse方法返回的是异步迭代器,而非直接返回完整数组,需要通过循环迭代来读取每一行数据,而不是直接await获取结果。


修正后的代码
// 统一使用相同版本的std库
import { parse as parseCsv } from "https://deno.land/std@0.166.0/encoding/csv.ts";
import { BufReader } from "https://deno.land/std@0.166.0/io/mod.ts";

const file = await Deno.open("data/test.csv");
const reader = new BufReader(file);
// 获取异步迭代器
const csvIterator = parseCsv(reader, {
  skipFirstRow: true,
  separator: "|",
});

const content = [];
// 迭代读取每一行数据
for await (const row of csvIterator) {
  content.push(row);
  // 这里可以直接将row写入SQLite,无需等待全部数据加载完成
}

console.log(content);
file.close(); // 记得关闭文件句柄

关键说明
  • 必须保证所有std库模块使用同一版本,避免API不兼容问题;
  • 大文件场景下,用for await...of迭代处理每一行,既能减少内存占用,也符合流式解析的设计逻辑;
  • 处理完成后记得关闭文件句柄,避免资源泄漏。

内容的提问来源于stack exchange,提问作者Dycey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:15:48