前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >CsvHelper:简化 .NET 中的 CSV 文件处理

CsvHelper:简化 .NET 中的 CSV 文件处理

作者头像
郑子铭
发布于 2025-04-01 01:34:09
发布于 2025-04-01 01:34:09
8200
代码可运行
举报
运行总次数:0
代码可运行

CsvHelper 是一个用于处理 CSV 文件的 .NET 库,能够简化 CSV 文件的读写操作,尤其是在处理复杂的数据结构时。支持快速、灵活且易于使用的读取和写入操作,并且完全免费用于商业用途。

1. 安装

第一步,老规矩,先安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dotnet add package CsvHelper

2. 基本用法

写入 CSV 文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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<Person>
    {
        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<T> 数据写入到 CSV 文件中。
  • HasHeaderRecord = true 表示写入列名。

2.1 读取 CSV 文件

使用 CsvReader 类可以轻松读取 CSV 文件并将其映射为 C# 对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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<Person>().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 自动映射列名和类的属性。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Delimiter = ";",  // 使用分号作为分隔符
    IgnoreBlankLines = true,  // 忽略空白行
};

4. 自定义映射

如果需要控制 CSV 列和类属性之间的映射关系,可以实现自定义映射类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using CsvHelper.Configuration;

publicclassPersonMap : ClassMap<Person>
{
    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<PersonMap>();  // 注册映射类
        var records = csv.GetRecords<Person>().ToList();
        foreach (varrecordinrecords)
        {
            Console.WriteLine($"Name: {record.Name}, Age: {record.Age}");
        }
    }
}

5. 错误处理

CsvHelper 提供了异常处理机制来处理 CSV 文件中的错误。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try
{
    using (var reader = new StreamReader("people.csv"))
    using (var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture)))
    {
        var records = csv.GetRecords<Person>().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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C#】CsvHelper 使用手册
CsvHelper 是一个用于读写 CSV 文件的.NET库。极其快速,灵活且易于使用。
丹枫无迹
2020/05/21
5.7K1
.NET使用CsvHelper快速读取和写入CSV文件
在日常开发中使用CSV文件进行数据导入和导出、数据交换是非常常见的需求,今天我们来讲讲在.NET中如何使用CsvHelper这个开源库快速实现CSV文件读取和写入。
追逐时光者
2024/06/26
4960
.NET使用CsvHelper快速读取和写入CSV文件
【译】使用 Visual Studio Profiler 进行基准测试
在 Visual Studio 17.13 预览版中,我们发布了更新的 BenchmarkDotNet 诊断器,允许您使用性能分析器中的更多工具来分析基准测试。有了这个变化,可以非常快速地挖掘 CPU 使用情况和内存分配,从而使测量/修改/测量周期快速而高效。
郑子铭
2025/03/10
970
【译】使用 Visual Studio Profiler 进行基准测试
在MVC中使用Json.Net序列化和反序列化Json对象
在.Net的MVC开发中,经常会使用到Json对象,于是,系统提供了JsonResult这个对象,其本质是调用.Net系统自带的Json序列化类JavaScriptSerializer对数据对象进行序列化。但是这个系统自带的Json序列化对象方法没有Json.Net好用,于是打算有些时候用Json.Net替代默认的实现。
深蓝studyzy
2022/06/16
1.3K0
.NET 命令行参数包含应用程序路径吗?
发布于 2018-09-11 13:28 更新于 2018-09-13 03:24
walterlv
2018/09/18
5620
.NET 命令行参数包含应用程序路径吗?
C#中通过Mapster实现轻量级高效对象映射器
当谈到 C# 中的对象关系映射时,许多人会立即想到 AutoMapper。事实上,AutoMapper 是一个出色的对象映射库。
郑子铭
2024/12/30
2300
C#中通过Mapster实现轻量级高效对象映射器
JAVA读取csv文件_java读取csv文件某一列
当读取的是一个简单的csv文件,即文件的列字段中不包含分隔符时,可以使用BufferedReader或者Scanner类去读取
全栈程序员站长
2022/11/16
4K0
【愚公系列】2023年01月 .NET CORE工具案例-SharpConfig配置文件读取库
在计算机科学领域,配置文件(英语:configuration file,台湾作设定档)是一种计算机文件,可以为一些计算机程序配置参数和初始设置。
愚公搬代码
2023/01/16
4060
Java读取csv文件Demo
此代码使用BufferedReader从CSV文件中逐行读取内容,并使用逗号分隔符将每行拆分为字符串数组。然后,它将每行数据存储在List<String[]>中。在示例的main方法中,它遍历并打印了每行数据。
默 语
2024/11/20
1340
Java读取csv文件Demo
携程 Apollo 配置中心传统 .NET 项目集成实践
可能由于 Apollo 配置中心的客户端源码一直处于更新中,导致其相关文档有些跟不上节奏,部分文档写的不规范,很容易给做对接的新手朋友造成误导。
Esofar
2019/08/07
8300
携程 Apollo 配置中心传统 .NET 项目集成实践
.NET Core玩转爬虫系列之借助正则表达式入门篇
模拟登录 -> 模拟发送request请求 -> 取回response数据 -> 提取所需信息并将其进行重新组织 -> 存入DB或文件中 -> 后期处理或展示
AI.NET 极客圈
2019/08/23
1.2K1
.NET Core玩转爬虫系列之借助正则表达式入门篇
.NET Core玩转爬虫系列之借助正则表达式入门篇
模拟登录 -> 模拟发送request请求 -> 取回response数据 -> 提取所需信息并将其进行重新组织 -> 存入DB或文件中 -> 后期处理或展示
Enjoy233
2019/08/29
7560
.NET Core玩转爬虫系列之借助正则表达式入门篇
在 .NET 8/9 中使用 AppUser 进行 JWT 令牌身份验证
JWT 身份验证是保护 API 的标准方法之一。这允许无状态身份验证,因为签名令牌是在客户端和服务器之间传递的。在 .NET 8 中,使用 JWT 令牌的方式得到了改进。将它们与 AppUser 类集成将为您的应用程序提供无缝身份验证。本文介绍了在 .NET 8 Web 应用程序中通过 AppUser 类实现 JWT 令牌身份验证的过程。
郑子铭
2024/12/23
4270
在 .NET 8/9 中使用 AppUser 进行 JWT 令牌身份验证
ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构
前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多。主要集中增删该查每个模块都有,所以本次是为封装相同接口方法    如果你想了解怎么重构普通的接口DAL层请查看第二节点    如果你只想了解利用T4链接EF生成代码,可以忽略前两节,之后跳后最后T4模版的使用。   (代码在最后)    补充:   最后必须让初学者理解一个知识点:分部类 partial 关键字,因为我们的重构是围绕分部类而实现,包括接口 partial 关键字指示可在命名空间中定义该类、结构或接口的其他
用户1149182
2018/01/16
2K0
ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构
Entity Framework 4.1 Code-First 学习笔记
  CodeFirst提供了一种先从代码开始工作,并根据代码直接生成数据库的工作方式。Entity Framework 4.1在你的实体不派生自任何基类、不添加任何特性的时候正常的附加数据库。另外呢,实体的属性也可以添加一些标签,但这些标签不是必须的。下面是一个简单的示例:
拓荒者IT
2019/09/25
1.7K0
IIncrementalGenerator 增量 Source Generator 生成代码应用 将构建时间写入源代码
本文将和大家介绍一个 IIncrementalGenerator 增量 Source Generator 生成代码技术的应用例子,将当前的构建时间写入到代码里面。这个功能可以比较方便实现某些功能的开关,比如说设置某个功能自动在具体应用发布之后过一段时间就失效等功能
林德熙
2023/11/28
2350
在 C# 语言中使用 LINQ 对数据进行筛选和排序
LINQ是“语言集成查询”(Language Integrated Query)的缩写。它使开发人员能够直观且高效地与集合进行交互。它为C#及其他.NET语言带来了类似SQL的查询功能,让从各种数据源(如集合、数据库和XML文件)中筛选、排序以及操作数据变得更加容易。
郑子铭
2025/01/22
2180
在 C# 语言中使用 LINQ 对数据进行筛选和排序
【贪玩巴斯】C/C++文件IO流操作的 seekp和seekg详解「建议收藏」
1.seek 是寻找 寻求的意思 2.tell 是告诉 告知的意思 3.那 p 即put 放和输出的意思,在这里是保存到文件 4.那 g 即get 是获取,读入的意思,在这里是从文件读取
全栈程序员站长
2022/09/05
1.6K0
从0到精通,System.Text.Json进阶技巧曝光,性能提升3倍!
在现代软件开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于前后端交互、配置文件管理以及分布式系统间的数据传输。System.Text.Json 是 .NET Core 3.0 及更高版本中引入的高性能 JSON 处理库,提供了序列化和反序列化的功能,并且与 .NET 平台深度集成。
郑子铭
2025/04/24
410
从0到精通,System.Text.Json进阶技巧曝光,性能提升3倍!
开源的.NET媒体文件操作组件TagLib#解析
彭泽0902
2018/01/04
8040
推荐阅读
相关推荐
【C#】CsvHelper 使用手册
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验