当前位置: 首页 > news >正文

C# 读取 CSV 文件的方法汇总

文章目录

  • 1. 使用System.IO命名空间中的类
  • 2. 处理标题行和指定列
  • 3. 使用CsvHelper库
  • 4. 高级功能和异常处理
  • 5. 使用 LINQ
  • 6. 总结

在这里插入图片描述


CSV(Comma-Separated Values,逗号分隔值)文件是一种简单的文本文件格式,用于存储表格数据。在C#中,有多种方法可以用于读取CSV文件。本文将介绍几种常见的读取CSV文件的方法,包括使用System.IO命名空间中的类、使用CsvHelper库以及使用LINQ。

1. 使用System.IO命名空间中的类

System.IO命名空间提供了基本的文件读取功能。以下是一个使用StreamReader读取CSV文件的基本示例:

using System;
using System.IO;class Program
{static void Main(){string filePath = "example.csv";string line;Encoding encoding = Encoding.UTF8; // 设置文件编码方式// 使用 StreamReader 读取 CSV 文件using (StreamReader reader = new StreamReader(filePath, encoding)){while ((line = reader.ReadLine()) != null){Console.WriteLine(line);}}}
}

在这个示例中,我们使用StreamReader类读取CSV文件,并设置了文件的编码方式为UTF-8。你可以根据实际需求更改编码方式,如GBK等。

2. 处理标题行和指定列

CSV文件通常包含标题行,以下是一个读取标题行和指定列的示例:

using System;
using System.IO;class Program
{static void Main(){string filePath = "example.csv";string line;Encoding encoding = Encoding.UTF8; // 设置文件编码方式// 使用 StreamReader 读取 CSV 文件using (StreamReader reader = new StreamReader(filePath, encoding)){// 读取标题行var header = reader.ReadLine();var headers = header.Split(',');// 读取指定列while ((line = reader.ReadLine()) != null){var fields = line.Split(',');Console.WriteLine($"{headers[0]}: {fields[0]}, {headers[1]}: {fields[1]}");}}}
}

在这个示例中,我们首先读取标题行,然后使用标题行中的列名输出指定列的数据。

3. 使用CsvHelper库

CsvHelper是一个流行的第三方库,用于处理CSV文件。首先,你需要在项目中安装CsvHelper包,可以通过NuGet包管理器进行安装:

Install-Package CsvHelper

然后,使用CsvHelper的CsvReader类读取CSV文件:

using CsvHelper;
using CsvHelper.Configuration;
using System;class Program
{static void Main(){string filePath = "example.csv";var config = new CsvConfiguration { HasHeaderRecord = true };// 使用 CsvReader 读取 CSV 文件using (var reader = new CsvReader(File.OpenRead(filePath), config)){var records = reader.GetRecords<dynamic>();foreach (var record in records){Console.WriteLine($"{record.Field1}, {record.Field2}, {record.Field3}");}}}
}

在这个示例中,我们使用CsvReader类读取CSV文件,并使用GetRecords()方法将记录转换为动态对象。

4. 高级功能和异常处理

在使用CsvHelper库时,你可以采取一些高级功能,如数据验证或异常处理。以下是一个示例:

using CsvHelper;
using CsvHelper.Configuration;
using System;class Program
{static void Main(){string filePath = "example.csv";var config = new CsvConfiguration { HasHeaderRecord = true };// 使用 CsvReader 读取 CSV 文件using (var reader = new CsvReader(File.OpenRead(filePath), config)){reader.Read();// 验证标题行if (reader.HeaderRecord.Any(header => header == "InvalidField")){throw new InvalidDataException("CSV文件包含无效字段。");}var records = reader.GetRecords<dynamic>();foreach (var record in records){// 验证记录if (record.Field1 == "InvalidValue"){throw new InvalidDataException("CSV文件包含无效值。");}Console.WriteLine($"{record.Field1}, {record.Field2}, {record.Field3}");}}}
}

在这个示例中,我们首先读取标题行,然后验证标题行和记录中的字段是否包含无效数据。如果包含无效数据,我们将抛出异常。

5. 使用 LINQ

LINQ(Language Integrated Query)提供了一种简洁的方式来进行数据查询。以下是一个使用 LINQ 读取 CSV 文件的示例:

using System;
using System.Linq;
using System.IO;class Program
{static void Main(){string filePath = "example.csv";string[] lines = File.ReadAllLines(filePath);foreach (var line in lines){string[] fields = line.Split(',');Console.WriteLine($"{fields[0]}, {fields[1]}, {fields[2]}");}}
}

在这个示例中,我们使用 File.ReadAllLines() 方法读取 CSV 文件的所有行,然后使用 Split() 方法分割每一行的字段,并输出到控制台。

6. 总结

在C#中,有多种方法可以用于读取CSV文件,包括使用System.IO命名空间中的类、使用CsvHelper库以及使用LINQ。你可以根据具体的需求和场景选择最适合的方法。希望本文能够帮助你更好地理解和使用这些方法。

在实际应用中,读取CSV文件时需要注意以下几点:

  1. 确保文件的编码方式与代码中的编码方式一致,否则可能导致乱码。
  2. 如果CSV文件中的数据包含特殊字符(如逗号、引号等),可能需要进行转义处理。
  3. 使用第三方库(如CsvHelper)时,确保已经安装了相应的包,并正确引用了相关的命名空间。
  4. 在处理CSV文件时,考虑数据的验证和异常处理,以确保程序的稳定性和数据的准确性。

相关文章:

C# 读取 CSV 文件的方法汇总

文章目录 1. 使用System.IO命名空间中的类2. 处理标题行和指定列3. 使用CsvHelper库4. 高级功能和异常处理5. 使用 LINQ6. 总结 CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔值&#xff09;文件是一种简单的文本文件格式&#xff0c;用于存储表格数据。在C#中&a…...

element+ 引入图标报错 Failed to resolve import “@element-plus/icons-vue“ from “

element 引入图标报错 Internal server error: Failed to resolve import “element-plus/icons-vue” from “src\components\TimeLine.vue”. Does the file exist? 原因&#xff1a;element-plus需要单独引入 icons 文档 pnpm install element-plus/icons-vue之后就可以…...

Github 2024-05-25 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3TypeScript项目3非开发语言项目1HTML项目1Rust项目1Go项目1Jupyter Notebook项目1Java项目1Angular文档:交付Web应用程序的自信之选…...

VPN的详细理解

VPN&#xff08;Virtual Private Network&#xff0c;虚拟私人网络&#xff09;是一种在公共网络上建立加密通道的技术&#xff0c;通过这种技术可以使远程用户访问公司内部网络资源时&#xff0c;实现安全的连接和数据传输。以下是对VPN的详细介绍&#xff1a; 选择代理浏览器…...

java后端轮播图的设计

对于表示轮播图位置这种有限且较小范围的数据&#xff0c;一般可以使用整数类型来表示。考虑到位置序号一般是非负整数且数量较少&#xff0c;可以选择使用小范围的整数类型&#xff0c;如下&#xff1a; 整数类型: 对于Java中&#xff0c;可以考虑使用 int 类型来表示位置序号…...

upload-labs 21关解析

目录 一、代码审计 二、实践 三、总结 一、代码审计 $is_upload false; $msg null; if(!empty($_FILES[upload_file])){//检查MIME$allow_type array(image/jpeg,image/png,image/gif);if(!in_array($_FILES[upload_file][type],$allow_type)){$msg "禁止上传该类型…...

常用汇编指令

&#xff08;arg&#xff09;argument&#xff1a;自变量&#xff0c;变元 &#xff08;reg&#xff09;register&#xff1a;寄存器 &#xff08;seg&#xff09;segment&#xff1a;段寄存器 &#xff08;mem&#xff09;memory&#xff1a;存储器&#xff08;内存单元&am…...

LabVIEW软件需求分析文档内容和编写指南

编写LabVIEW软件需求分析文档&#xff08;Software Requirements Specification, SRS&#xff09;是软件开发的关键步骤之一。以下是详细的内容结构、编写指南和注意事项&#xff1a; 内容结构 引言 项目背景&#xff1a;简要介绍项目背景和目的。 文档目的&#xff1a;说明需…...

spring cache(三)demo

目录 一、入门demo 1、pom 2、配置文件 3、config 4、controller 5、service 6、dao 7、dto与常量 8、测试&#xff1a; 8.1、无参 8.2、单参 &#xff08;1&#xff09;缓存与删除缓存 &#xff08;2&#xff09;删除缓存加入异常 二、自定义删除key 1、pom 2、…...

Android 应用开发语言选择对比

Android开发语言有多种&#xff0c;但是每种语言的各有不同的适用场景&#xff0c;对比介绍如下&#xff1a; 一.首选&#xff1a;原生应用Java&#xff0c;Kotlin 1.截至目前&#xff0c;大约有70%的Android开发者仍然使用Java语言进行开发&#xff0c;而30%的开发者则选择…...

Git 小白入门到进阶—(基本概念和常用命令)

一.了解 Git 基本概念和常用命令的作用 (理论) 基本概念 1、工作区 包含.git文件夹的目录&#xff0c;主要用存放开发的代码2、仓库 分为本地仓库和远程仓库&#xff0c;本地仓库是自己电脑上的git仓库(.git文件夹);远程仓库是在远程服务器上的git仓库git文件夹无需我们进行操…...

大数据框架总结(全)

☔️ 大数据框架总结&#xff08;全&#xff09; 关注“大数据领航员”&#xff0c;在公众号号中回复关键字【大数据面试资料】&#xff0c;即可可获取2024最新大数据面试资料的pdf文件 一. Hadoop HDFS读流程和写流程 HDFS写数据流程 &#xff08;1&#xff09;客户端通过…...

44、Flink 的 Interval Join 详解

Interval Join Interval join 组合元素的条件为&#xff1a;两个流&#xff08;暂时称为 A 和 B&#xff09;中 key 相同且 B 中元素的 timestamp 处于 A 中元素 timestamp 的一定范围内&#xff0c;即 b.timestamp ∈ [a.timestamp lowerBound; a.timestamp upperBound] 或…...

H6246 60V降压3.3V稳压芯片 60V降压5V稳压芯片IC 60V降压12V稳压芯片

H6246降压稳压芯片是一款电源管理芯片&#xff0c;为高压输入、低压输出的应用设计。以下是对该产品的详细分析&#xff1a; 一、产品优势 宽电压输入范围&#xff1a;H6246支持8V至48V的宽电压输入范围&#xff0c;使其能够适应多种不同的电源环境&#xff0c;增强了产品的通用…...

【MySQL精通之路】查询优化器的使用(8)

MySQL通过影响查询计划评估方式的系统变量、可切换优化、优化器和索引提示以及优化器成本模型提供优化器控制。 服务器在column_statistics数据字典表中维护有关列值的直方图统计信息&#xff08;请参阅第10.9.6节“Optimizer统计信息”&#xff09;。与其他数据字典表一样&am…...

Docker in Docker(DinD)原理与实践

随着云计算和容器化技术的快速发展&#xff0c;Docker作为开源的应用容器引擎&#xff0c;已经成为企业部署和管理应用程序的首选工具。然而&#xff0c;在某些场景下&#xff0c;我们可能需要在Docker容器内部再运行一个Docker环境&#xff0c;即Docker in Docker&#xff08;…...

科技前沿:IDEA插件Translation v3.6 带来革命性更新,翻译和发音更智能!

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …...

【并发小知识】

计算机五大组成部分 控制器 运算器 存储器 输入设备 输出设备 计算机的核心真正干活的是CPU&#xff08;控制器运算器中央处理器&#xff09; 程序要想计算机运行&#xff0c;它的代码必须要先由硬盘读到内存&#xff0c;之后cpu取指再执行 操作系统发展史 穿孔卡片处理…...

python将多个音频文件与一张图片合成视频

代码中m4a可以换成mp3,图片和音频放同一目录&#xff0c;图片名image.jpg&#xff0c;多线程max_workers可以根据CPU核心数量修改。 import os import subprocess import sys import concurrent.futures import ffmpeg def get_media_duration(media_path): probe ffmp…...

JavaEE:Servlet创建和使用及生命周期介绍

目录 ▐ Servlet概述 ▐ Servlet的创建和使用 ▐ Servlet中方法介绍 ▐ Servlet的生命周期 ▐ Servlet概述 • Servlet是Server Applet的简称&#xff0c;意思是 用Java编写的服务器端的程序&#xff0c;Servlet被部署在服务器中&#xff0c;而服务器负责管理并调用Servle…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...