CsvHelper
是一个用于处理 CSV 文件的 .NET 库,能够简化 CSV 文件的读写操作,尤其是在处理复杂的数据结构时。支持快速、灵活且易于使用的读取和写入操作,并且完全免费用于商业用途。
1. 安装
第一步,老规矩,先安装
dotnet add package CsvHelper
2. 基本用法
写入 CSV 文件
using CsvHelper;using CsvHelper.Configuration;using System.Globalization;using System.IO;using System.Collections.Generic;publicclassPerson{ publicstring Name { get; set; } publicint Age { get; set; }}public void WriteCsv(){ var records = new List { new Person { Name = "Alice", Age = 30 }, new Person { Name = "Bob", Age = 25 } }; var config = new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = true, // 写入头部 }; using (var writer = new StreamWriter("people.csv")) using (var csv = new CsvWriter(writer, config)) { csv.WriteRecords(records); }}
- •
WriteRecords()
方法将List
数据写入到 CSV 文件中。 - •
HasHeaderRecord = true
表示写入列名。
2.1 读取 CSV 文件
使用 CsvReader
类可以轻松读取 CSV 文件并将其映射为 C# 对象。
using CsvHelper;using CsvHelper.Configuration;using System.Globalization;using System.IO;using System.Linq;publicclassPerson{ publicstring Name { get; set; } publicint Age { get; set; }}public void ReadCsv(){ var config = new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = true, // CSV 文件是否包含头部 }; using (var reader = new StreamReader("people.csv")) using (var csv = new CsvReader(reader, config)) { var records = csv.GetRecords().ToList(); foreach (varrecordinrecords) { Console.WriteLine($"Name: {record.Name}, Age: {record.Age}"); } }}//读取索引头publicclassFoo{ [Index(0)] publicint age { get; set; } [Index(1)] publicstring Name { get; set; }}//指定名称publicclassFoo{ [Name("id")] publicint Id { get; set; } [Name("name")] publicstring Name { get; set; }}
3. 配置选项
CsvHelper
提供了多种配置选项,可以通过 CsvConfiguration
类进行自定义:
- • 分隔符:如果 CSV 文件的分隔符是其他字符,可以设置
Delimiter
属性。 - • 忽略空白行:
IgnoreBlankLines = true
,可以忽略文件中的空白行。 - • 自动映射:
csv.AutoMap()
方法可以让CsvHelper
自动映射列名和类的属性。
var config = new CsvConfiguration(CultureInfo.InvariantCulture){ Delimiter = ";", // 使用分号作为分隔符 IgnoreBlankLines = true, // 忽略空白行};
4. 自定义映射
如果需要控制 CSV 列和类属性之间的映射关系,可以实现自定义映射类。
using CsvHelper.Configuration;publicclassPersonMap : ClassMapPerson>{ public PersonMap() { Map(m => m.Name).Name("Full Name"); // 将 "Full Name" 列映射到 Name 属性 Map(m => m.Age).Name("Years Old"); // 将 "Years Old" 列映射到 Age 属性 }}public void ReadCsvWithMap(){ var config = new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = true, }; using (var reader = new StreamReader("people.csv")) using (var csv = new CsvReader(reader, config)) { csv.Context.RegisterClassMap(); // 注册映射类 var records = csv.GetRecords().ToList(); foreach (varrecordinrecords) { Console.WriteLine($"Name: {record.Name}, Age: {record.Age}"); } }}
5. 错误处理
CsvHelper
提供了异常处理机制来处理 CSV 文件中的错误。
try{ using (var reader = new StreamReader("people.csv")) using (var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture))) { var records = csv.GetRecords().ToList(); }}catch (CsvHelperException ex){ Console.WriteLine($"Error reading CSV file: {ex.Message}");}
6. 总结
CsvHelper
是一个功能强大的库,提供了多种方式来读取和写入 CSV 文件。通过配置和自定义映射,可以轻松地处理不同格式的 CSV 文件。如果需要进行复杂的数据转换,CsvHelper
也能够满足需求。
7. 资源链接
- • 仓库地址:https://github.com/JoshClose/CsvHelper
- • 文档地址:https://joshclose.github.io/CsvHelper
推荐阅读: 8款支持 C# 语言的 AI 辅助编程神器,高效编程利器! C#字符串拼接的6种方式及其性能分析对比 C# 自定义异常:提升代码健壮性与可维护性 EquinoxProject:一个适合学习DDD、CQRS、Event Sourcing等技术.Net Web框架搭建开源项目 .NET图像处理新利器!PhotoSauce:高质量、高性能图像大小调整开源工具 探索 QuestPDF:全平台支持、多功能、专业级的 .NET PDF 库 点击下方卡片关注DotNet NB
一起交流学习
▲卡片关注DotNet NB,一起交流学习
请在公众号后台
回复 【路线图】获取.NET 2024开发者路线 回复 【原创内容】获取公众号原创内容 回复 【峰会视频】获取.NET Conf大会视频 回复 【个人简介】获取作者个人简介 回复 【年终总结】获取作者年终回顾 回复【加群】加入DotNet NB 交流学习群 长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。