C#使用csvhelper实现csv的操作

新建控制台项目

安装csvhelper 33.0.1
在这里插入图片描述

写入csv

新建Foo.cs

namespace CsvSut02;public class Foo
{public int Id { get; set; }public string Name { get; set; }
}

批量写入

using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;namespace CsvSut02;class Program
{static void Main(string[] args){List<Foo> foos = new List<Foo>();for (int i = 0; i < 100; i++){foos.Add(new Foo(){Id = i,Name = "我是" + i});}var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv";using (var writer = new StreamWriter(fileName)){var config = new CsvConfiguration(CultureInfo.InvariantCulture);using (var csv = new CsvWriter(writer, config)){csv.WriteRecords(foos);}}}
}

在这里插入图片描述

逐条写入

using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;namespace CsvSut02;class Program
{static void Main(string[] args){List<Foo> foos = new List<Foo>();for (int i = 0; i < 100; i++){foos.Add(new Foo(){Id = i,Name = "我是" + i});}var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv";using (var writer = new StreamWriter(fileName)){var config = new CsvConfiguration(CultureInfo.InvariantCulture);using (var csv = new CsvWriter(writer, config)){//这里看过来foreach (var foo in foos){csv.WriteRecord(foo);csv.NextRecord();}}}}
}

在这里插入图片描述

增加标题

特性方式

using CsvHelper.Configuration.Attributes;namespace CsvSut02;public class Foo
{[Name("Id")]public int Id { get; set; }[Name("Name")]public string Name { get; set; }
}using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;namespace CsvSut02;class Program
{static void Main(string[] args){List<Foo> foos = new List<Foo>();for (int i = 0; i < 100; i++){foos.Add(new Foo(){Id = i,Name = "我是" + i});}var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv";using (var writer = new StreamWriter(fileName)){var config = new CsvConfiguration(CultureInfo.InvariantCulture);using (var csv = new CsvWriter(writer, config)){csv.WriteHeader<Foo>();csv.NextRecord(); foreach (var foo in foos){csv.WriteRecord(foo);csv.NextRecord();}}}}
}

在这里插入图片描述

配置类

新建FooClassMap.cs

using CsvHelper.Configuration;namespace CsvSut02;public class FooClassMap : ClassMap<Foo>
{public FooClassMap(){Map(m => m.Id).Index(0).Name("id");Map(m => m.Name).Index(1).Name("name");}
}

修改Program.cs

using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;namespace CsvSut02;class Program
{static void Main(string[] args){List<Foo> foos = new List<Foo>();for (int i = 0; i < 100; i++){foos.Add(new Foo(){Id = i,Name = "我是" + i});}var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv";using (var writer = new StreamWriter(fileName)){var config = new CsvConfiguration(CultureInfo.InvariantCulture);using (var csv = new CsvWriter(writer, config)){csv.Context.RegisterClassMap<FooClassMap>();csv.WriteHeader<Foo>();csv.NextRecord();foreach (var foo in foos){csv.WriteRecord(foo);csv.NextRecord();}}}}
}

在这里插入图片描述

可能有人觉得麻烦,使用配置类可以保证原始类的纯粹,保证poco

读取csv

读取和写入一样,可以两种方式实现一个是配置类一个是特性,下面都以特性演示

无标题csv

在这里插入图片描述

using CsvHelper.Configuration.Attributes;namespace CsvSut02;public class Foo
{[Index(0)]public int Id { get; set; }[Index(1)]public string Name { get; set; }
}using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;namespace CsvSut02;class Program
{static void Main(string[] args){var file = "2024_07_24_18_24_00.csv";using (var reader = new StreamReader(file)){var config = new CsvConfiguration(CultureInfo.InvariantCulture);config.HasHeaderRecord = false;//没有头部using (var csv = new CsvReader(reader, config)){var records = csv.GetRecords<Foo>().ToList();foreach (var record in records){Console.WriteLine(record.Id);   }}}}
}

在这里插入图片描述

有标题csv

在这里插入图片描述

using CsvHelper.Configuration.Attributes;namespace CsvSut02;public class Foo
{[Name("id")]public int Id { get; set; }[Name("name")]public string Name { get; set; }
}using CsvHelper.Configuration.Attributes;namespace CsvSut02;public class Foo
{[Name("id")]public int Id { get; set; }[Name("name")]public string Name { get; set; }
}using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;namespace CsvSut02;class Program
{static void Main(string[] args){var file = "2024_07_24_18_30_49.csv";using (var reader = new StreamReader(file)){var config = new CsvConfiguration(CultureInfo.InvariantCulture);config.HasHeaderRecord = true;//有头部using (var csv = new CsvReader(reader, config)){var records = csv.GetRecords<Foo>().ToList();foreach (var record in records){Console.WriteLine(record.Id);   }}}}
}

在这里插入图片描述

增量写入

using System.Globalization;
using System.Text;
using CsvHelper;
using CsvHelper.Configuration;namespace CsvSut02;class Program
{static void Main(string[] args){var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv";WriteModelWithAppend(fileName);WriteModelWithAppend(fileName);}/// <summary>/// 追加方式写入/// </summary>/// <param name="fileName"></param>static void WriteModelWithAppend(string fileName){var model = new Foo();model.Id = 1;model.Name = "测试";// 检查文件是否存在,以确定是否应该以追加模式打开  var mode = File.Exists(fileName) ? FileMode.Append : FileMode.Create;var config = new CsvConfiguration(CultureInfo.InvariantCulture);using var writer = new StreamWriter(new FileStream(fileName, mode, FileAccess.Write, FileShare.Read),Encoding.UTF8);using var csv = new CsvWriter(writer, config);if (mode == FileMode.Create){csv.WriteHeader<Foo>();csv.NextRecord(); }csv.WriteRecord(model);csv.NextRecord(); }
}

在这里插入图片描述

注意多线程有问题需要加锁

参考

https://blog.csdn.net/guliang21/article/details/106233049
https://joshclose.github.io/CsvHelper/getting-started

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/386910.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[数据集][目标检测]金属罐缺陷检测数据集VOC+YOLO格式8095张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8095 标注数量(xml文件个数)&#xff1a;8095 标注数量(txt文件个数)&#xff1a;8095 标注…

使用Process Explorer和Dependency Walker排查dll动态库加载失败的问题

目录 1、问题描述 2、如何调试Release版本的代码&#xff1f; 3、使用Process Explorer查看exe主程序加载的dll库列表&#xff0c;发现mediaplay.dll没有加载起来 4、使用Dependency Walker查看rtcmpdll.dll的库依赖关系和接口调用情况&#xff0c;定位问题 4.1、使用Depe…

Javascript面试基础6【每日更新10】

Gulp gulp是前端开发过程中一种基于流的代码构建工具&#xff0c;是自动化项目的构建利器;它不仅能对网站资源进行优化&#xff0c;而且在开发过程中很多重复的任务能够使用正确的工具自动完成 Gulp的核心概念:流 流&#xff0c;简单来说就是建立在面向对象基础上的一种抽象的…

多微信聚合神器:高效沟通,一个界面全搞定!

大家都知道&#xff0c;频繁的来回切换微信&#xff0c;不仅浪费时间&#xff0c;还容易错过重要的信息。 今天&#xff0c;我要向大家推荐一款多微信管理神器——个微管理系统&#xff0c;助你实现统一管理&#xff0c;聚合聊天&#xff0c;让沟通变得更加高效。 1、网页扫码…

基于MindIE实现通义千问Qwen推理加速

一、昇腾开发者平台申请镜像 登录Ascend官网昇腾社区-官网丨昇腾万里 让智能无所不及 二、登录并下载mindie镜像 #登录docker login -u XXX#密码XXX#下载镜像docker pull XXX 三、下载Qwen的镜像 使用wget命令下载Qwen1.5-0.5B-Chat镜像&#xff0c;放在/mnt/Qwen/Qwen1.5-…

【无标题】Git(仓库,分支,分支冲突)

Git 一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更 一&#xff0e;Git的主要功能&#xff1a; 二&#xff0e;准备git机器 修改静态ip&#xff0c;主机名 三&#xff0e;git仓库的建立&#xff1a; 1.安装git [rootgit ~]# yum -y install git 2.创建一个…

【策略工厂模式】记录策略工厂模式简单实现

策略工厂模式 1. 需求背景2. 代码实现2.1 定义基类接口2.2 排序策略接口定义2.3 定义抽象类&#xff0c;实现策略接口2.4 具体的排序策略实现类2.5 实现策略工厂类2.6 控制类 3. 启动测试4. 总结 1. 需求背景 现在需要你创建一个策略工厂类&#xff0c;来根据策略实现各种排序…

【JAVA】记录一次前端无能造成的 线上bug

有一个需求是 当方式切换 垫资时 清空 当前所选细单商品 但是前端的奇葩 操作是&#xff0c;只是在页面上清空 细单。 不请求 后台删除 细单 让前端 必须 清空同时 请求后台 删除细单 但是 该前端 技术不行&#xff0c; 嫌麻烦 不做 只好 后台 判断该类型时 进行删除操作…

AutoMQ 开源可观测性方案:夜莺 Flashcat

01 引言 在现代企业中&#xff0c;随着数据处理需求的不断增长&#xff0c;AutoMQ [1] 作为一种高效、低成本的流处理系统&#xff0c;逐渐成为企业实时数据处理的关键组件。然而&#xff0c;随着集群规模的扩大和业务复杂性的增加&#xff0c;确保 AutoMQ 集群的稳定性、高可…

权限管理的概述以及vue开发前端的路由、菜单、按钮权限控制实现方案

1. 权限管理概念 1.1 权限定义 权限管理是确保用户只能访问被授权资源的机制。在计算机系统中&#xff0c;权限通常指对特定数据或功能的访问权。权限的设置和控制对于保护数据安全和系统安全至关重要。 1.2 前端权限控制重要性 前端权限控制是用户与应用交互的第一道防线。…

黑马头条Day12-项目部署_持续集成

一、今日内容介绍 1. 什么是持续集成 持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff09;&#xff0c;指的是频繁地&#xff08;一天多次&#xff09;将代码集成到主干。 持续集成的组成要素&#xff1a; 一个自动构建过程&#xff0c;从检出代码、…

jdk版本管理利器-sdkman

1.什么是sdkman&#xff1f; sdkman是一个轻量级、支持多平台的开源开发工具管理器&#xff0c;可以通过它安装任意主流发行版本&#xff08;例如OpenJDK、Kona、GraalVM等等&#xff09;的任意版本的JDK。通过下面的命令可以轻易安装sdkman: 2.安装 curl -s "https://…

什么是 5G?

什么是 5G&#xff1f; 5G 是第五代无线蜂窝技术&#xff0c;与以前的网络相比&#xff0c;它提供了更高的上传和下载速度、更一致的连接以及更高的容量。5G 比目前流行的 4G 网络更快、更可靠&#xff0c;并有可能改变我们使用互联网访问应用程序、社交网络和信息的方式。例如…

通过 WSL 2 在Windows 上挂载 Linux 磁盘

原文查看 曾为了传输或者共享不同系统的文件频繁地在 Windows 和 Linux 系统之间切换&#xff0c;效率过低&#xff0c;所以尝试通过 WSL 2 在Windows 上挂载 Linux 磁盘。 先决条件 需要在Windows 10 2004 及更高版本&#xff08;Build 19041 及更高版本&#xff09;或 Win…

Redis 缓存

安装 安装 Redis 下载&#xff1a; Releases tporadowski/redis (github.com) winr ----services.msc-----将redis 设置为手动(只是学习&#xff0c;如果经常用可以设置为自动) 安装 redis-py 库 pip install redis-py Redis 和 StrictRedis redis-py 提供 Redis 和 Str…

UDP通信 单播,广播,组播

UDP通信实现 #include <sys/types.h> #include <sys/socket.h> ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); - 参数&#xff1a; struct sockaddr *src_addr, socklen_t *addrlen…

vue基础3

1.推荐好用的第三方框架 BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务 1.moment.js 2.dayjs 2.收集表达数据 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Document</title><…

MyBatis-Plus自动生成代码

目录 前言一. 什么是 MyBatis-Plus1. Mybatis-Plus 的特点2. Mybatis-Plus 结构二. MyBatis-Plus 自动生成步骤1. 数据库准备2. 环境准备(1) 创建一个空的 Spring Boot 工程(2) 导入pom依赖(3) 编辑application.yml文件(4) 在启动类加入 @MapperScan 注解3. 配置代码4. 运行三.…

数据库安全:MySQL安全配置,MySQL安全基线检查加固

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 这一章节我们需要知道MySQL的安全基线标准和加固方式。 MySQL基线检查 1、更新…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 围棋的气(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…