.NET 使用 CsvHelper 快速读取和写入 CSV 文件

前言

在日常开发中使用CSV文件进行数据导入和导出、数据交换是非常常见的需求,今天我们来讲讲在 .NET 中如何使用CsvHelper这个开源库快速实现CSV文件读取和写入。

CsvHelper类库介绍

CsvHelper是一个.NET开源、快速、灵活、高度可配置、易于使用的用于读取和写入CSV文件的类库。

CsvHelper类库功能特点

什么是 .csv 文件?

.csv 文件是一种用于存储表格数据的文本文件,CSV 是 "Comma-Separated Values" 的缩写,意思是 "逗号分隔值"。CSV 文件是一个存储表格和电子表格信息的纯文本文件,其内容通常是一个文本、数字或日期的表格。CSV 文件可以使用以表格形式存储数据的程序轻松导入和导出。

创建控制台应用

创建一个名为:CsvHelperExercise的.NET 8控制台应用。

安装CsvHelper类库

NuGet包管理器中搜索:CsvHelper,点击安装!

定义CSV文件读取和写入的对象

复制代码
    public class StudentInfo
    {
        /// <summary>
        /// 学生学号
        /// </summary>
        public int ID { get; set; }

        /// <summary>
        /// 学生姓名
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 学生年龄
        /// </summary>
        public int Age { get; set; }

        /// <summary>
        /// 班级
        /// </summary>
        public string Class { get; set; }

        /// <summary>
        /// 性别
        /// </summary>
        public string Gender { get; set; }

        /// <summary>
        /// 住址
        /// </summary>
        public string Address { get; set; }
    }

写入CSV文件数据

复制代码
        static void Main(string[] args)
        {
            var students = new List<StudentInfo>
            {
                new StudentInfo { ID = 1, Name = "张三", Age = 20, Class = "终极一班", Gender = "男", Address = "北京市东城区" },
                new StudentInfo { ID = 2, Name = "李四", Age = 21, Class = "终极一班", Gender = "女", Address = "上海市黄浦区" },
                new StudentInfo { ID = 3, Name = "王五", Age = 22, Class = "终极一班", Gender = "男", Address = "广州市越秀区" },
                new StudentInfo { ID = 4, Name = "赵六", Age = 20, Class = "终极二班", Gender = "女", Address = "深圳市福田区" },
                new StudentInfo { ID = 5, Name = "孙七", Age = 23, Class = "终极二班", Gender = "男", Address = "杭州市西湖区" },
                new StudentInfo { ID = 6, Name = "周八", Age = 24, Class = "终极二班", Gender = "女", Address = "南京市玄武区" },
                new StudentInfo { ID = 7, Name = "吴九", Age = 22, Class = "终极二班", Gender = "男", Address = "成都市锦江区" },
                new StudentInfo { ID = 8, Name = "小袁", Age = 21, Class = "终极三班", Gender = "女", Address = "重庆市渝中区" },
                new StudentInfo { ID = 9, Name = "大姚", Age = 20, Class = "终极三班", Gender = "男", Address = "武汉市武昌区" },
                new StudentInfo { ID = 10, Name = "追逐时光者", Age = 23, Class = "终极三班", Gender = "女", Address = "长沙市天心区" },
                new StudentInfo { ID = 11, Name = "陈十一", Age = 22, Class = "终极四班", Gender = "男", Address = "天津市和平区" },
                new StudentInfo { ID = 12, Name = "黄十二", Age = 21, Class = "终极四班", Gender = "女", Address = "西安市雁塔区" },
                new StudentInfo { ID = 13, Name = "刘十三", Age = 24, Class = "终极四班", Gender = "男", Address = "苏州市姑苏区" },
                new StudentInfo { ID = 14, Name = "郑十四", Age = 20, Class = "终极四班", Gender = "女", Address = "东莞市莞城区" },
                new StudentInfo { ID = 15, Name = "冯十五", Age = 23, Class = "终极五班", Gender = "男", Address = "佛山市禅城区" },
                new StudentInfo { ID = 16, Name = "褚十六", Age = 25, Class = "终极五班", Gender = "女", Address = "厦门市思明区" },
                new StudentInfo { ID = 17, Name = "卫十七", Age = 22, Class = "终极五班", Gender = "男", Address = "青岛市市南区" },
                new StudentInfo { ID = 18, Name = "蒋十八", Age = 21, Class = "终极五班", Gender = "女", Address = "大连市中山区" },
                new StudentInfo { ID = 19, Name = "沈十九", Age = 24, Class = "终极六班", Gender = "男", Address = "宁波市海曙区" },
                new StudentInfo { ID = 20, Name = "韩二十", Age = 20, Class = "终极六班", Gender = "女", Address = "温州市鹿城区" }
            };

            //写入CSV文件数据
            using var writer = new StreamWriter(@".\StudentInfoFile.csv");
            using var csvWriter = new CsvWriter(writer, CultureInfo.InvariantCulture);
            csvWriter.WriteRecords(students);
        }

读取CSV文件数据

快速读取上面写入到StudentInfoFile.csv中的数据。

复制代码
        static void Main(string[] args)
        {
            //读取CSV文件数据
            using var reader = new StreamReader(@".\StudentInfoFile.csv");
            using var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
            var getStudentInfos = csvReader.GetRecords<StudentInfo>().ToList();
        }

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。

相关推荐
魔法阵维护师16 分钟前
从零开发游戏需要学习的c#模块,第十二章(rpg小游戏入门,中篇,金币收集与ui显示)
学习·游戏·c#
魔法阵维护师21 分钟前
从零开发游戏需要学习的c#模块,第十九章(在游戏画面里显示文字 —— FontStashSharp)
学习·游戏·c#
sinat_367104561 小时前
WPF 常用控件
c#·xaml·控件·wfp
Artech1 小时前
[对比学习LangChain和MAF-03]完全不同的Agent设计哲学
python·ai·langchain·c#·agent·maf
xiaoshuaishuai82 小时前
C# CUDA 到 OpenCL 迁移
开发语言·windows·c#
richard_yuu2 小时前
C#开发全景概述:从零读懂C#的定位、优势与完整技术体系
开发语言·c#
Xin_ye100862 小时前
C# 零基础到精通教程 - 第十二章:异常处理与调试——让程序更健壮
开发语言·c#
楼田莉子2 小时前
C#学习之C#入门学习
开发语言·后端·学习·c#
小钻风33662 小时前
从零入门 Kafka:Java 原生 API 到 Spring Boot 实战全解析
c#·linq
步步为营DotNet2 小时前
解锁.NET 11 新境:ASP.NET Core 10 在微服务安全通信的深化与实践
微服务·asp.net·.net