使用 CsvHelper 获取列名列表的最佳方法是啥?
Posted
技术标签:
【中文标题】使用 CsvHelper 获取列名列表的最佳方法是啥?【英文标题】:What is the best way to get the list of column names using CsvHelper?使用 CsvHelper 获取列名列表的最佳方法是什么? 【发布时间】:2018-06-26 17:01:24 【问题描述】:我正在尝试将 CsvHelper 用于项目。我浏览了文档,但找不到使用单一方法读取所有列名的方法。如何使用 CsvHelper 轻松获取所有列标题名称的列表?我目前正在这样做,但我认为有更好的方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CsvHelper;
using System.IO;
namespace Kg
class Program
static void Main(string[] args)
using (var reader = new StreamReader(@"myfile.csv"))
var csv = new CsvReader(reader);
csv.Read();
var has_header = true;
var csv_headers = new List<string>();
var header_index = 0;
while (has_header)
has_header = csv.TryGetField<string>(header_index, out string header_name);
if (has_header)
header_index += 1;
csv_headers.Add(header_name);
Console.WriteLine(csv_headers.Count);
【问题讨论】:
通常您知道数据代表什么,因此如果您创建一个类来保存导入的数据,CSVHelper 将为您创建类型化对象并将它们放入一个集合中。 据我所知,csv文件的标题只是第一行。 @Plutonix,谢谢,是的,我同意,但是有超过 50 列,我想创建一个可重用的类,我可以通过解析 csv 文件并设置类型来获取标题名称基于每列的前几行。 @derloopkat 是的,并且很容易通过索引(csv[0])获取第一行中存在的列名,但是没有简单的方法来获取列数。 创建一个类——即使有 50 个道具——仍然比读取、解析和猜测数据类型更简单 【参考方案1】:标头记录在 csv 上下文中。访问前需要事先阅读。
csv.Read();
csv.ReadHeader();
string[] headerRow = csv.Context.HeaderRecord;
【讨论】:
【参考方案2】:以前的答案可以正常工作,但从 csvhelper 的第 20 版开始,发生了重大变化。现在只需直接从阅读器访问标题记录:
csv.Read();
csv.ReadHeader();
string[] headerRow = csv.HeaderRecord;
【讨论】:
注意:这些是未处理的标头。如果您使用PrepareHeaderForMatch
来调整标题(例如用下划线替换空格),则不会反映在HeaderRecord
列表中。以上是关于使用 CsvHelper 获取列名列表的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以扩展包含列表的 pandas Dataframe 中的列并从列表值本身中获取列名?