在 TypeScript 中处理 CSV:库与代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 TypeScript 中处理 CSV:完整指南



CSV(逗号分隔值)是交换表格数据最流行的格式之一。在 TypeScript(和 JavaScript)中,有多个强大的库可用于解析、生成和处理 CSV 文件。本文将介绍主要工具、它们的功能,并提供实际示例。



为什么要使用 CSV 库?



JavaScript 的内置方法(例如 split(','))无法处理复杂情况:

  • 字段内转义的引号和逗号
  • 不同的分隔符(分号、制表符)
  • 不同的编码和 BOM
  • 多行值
  • 不同的行尾类型(CRLF、LF)

专业的库可以解决所有这些问题,并提供便捷的 API 来处理数据。



1. csv-parse — 在 Node.js 和浏览器中解析 CSV



csv-parse 是 csv.js 生态系统的一部分,是最流行的解析库之一。它既可以在 Node.js 中使用,也可以在浏览器中(通过打包工具)使用。



安装

npm install csv-parse


TypeScript 使用示例

import { parse } from 'csv-parse/sync';import { readFileSync } from 'fs';

interface User { id: number; name: string; email: string;}

const csvData = readFileSync('users.csv', 'utf-8');const records: User[] = parse(csvData, { columns: true, // 第一行为标题 skip_empty_lines: true, delimiter: ',', cast: (value, context) => { if (context.column === 'id') return parseInt(value, 10); return value; }});

console.log(records);


2. PapaParse — 适用于浏览器和 Node.js 的通用解析器



PapaParse 是一个库,具有出色的对大文件的支持(流式处理)、自动分隔符检测和广泛的配置选项。



安装

npm install papaparse


带结果类型化的示例

import Papa from 'papaparse';

interface Product { sku: string; price: number; quantity: number;}

const csvString = `sku,price,quantityABC-001,29.99,100ABC-002,49.50,50`;

const result = Papa.parse<Product>(csvString, { header: true, dynamicTyping: true, // 自动类型转换 skipEmptyLines: true});

if (result.errors.length > 0) { console.error('解析错误:', result.errors);} else { result.data.forEach(product => { console.log(`商品 ${product.sku}: ${product.price} 卢布`); });}


3. csv-stringify — 从数据生成 CSV



对于反向任务——从对象数组创建 CSV——请使用 csv-stringify。它也是 csv.js 生态系统的一部分。



安装

npm install csv-stringify


生成 CSV 示例

import { stringify } from 'csv-stringify/sync';import { writeFileSync } from 'fs';

interface Order { orderId: number; customer: string; total: number;}

const orders: Order[] = [ { orderId: 1001, customer: '伊万·彼得罗夫', total: 1500.50 }, { orderId: 1002, customer: '玛丽亚·西多罗娃', total: 2300.00 }, { orderId: 1003, customer: '阿列克谢·伊万诺夫', total: 890.75 }];

const csvOutput = stringify(orders, { header: true, columns: ['orderId', 'customer', 'total']});

writeFileSync('orders.csv', csvOutput, 'utf-8');console.log('CSV 文件创建成功');


4. 错误处理与数据验证



处理 CSV 时,正确进行错误处理非常重要。来看一个数据验证的示例:



import Papa from 'papaparse';

interface ValidatedRow { isValid: boolean; errors: s

推荐