CsvHelper 是一个用于处理 CSV 文件的 .NET 库,能够简化 CSV 文件的读写操作,尤其是在处理复杂的数据结构时。支持快速、灵活且易于使用的读取和写入操作,并且完全免费用于商业用途。
1. 安装
第一步,老规矩,先安装
dotnet add package CsvHelper2. 基本用法
写入 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 交流学习群 长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。 



