CsvHelper
是一个用于处理 CSV 文件的 .NET 库,能够简化 CSV 文件的读写操作,尤其是在处理复杂的数据结构时。支持快速、灵活且易于使用的读取和写入操作,并且完全免费用于商业用途。
第一步,老规矩,先安装
dotnet add package CsvHelper
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
表示写入列名。使用 CsvReader
类可以轻松读取 CSV 文件并将其映射为 C# 对象。
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; }
}
CsvHelper
提供了多种配置选项,可以通过 CsvConfiguration
类进行自定义:
Delimiter
属性。IgnoreBlankLines = true
,可以忽略文件中的空白行。csv.AutoMap()
方法可以让 CsvHelper
自动映射列名和类的属性。var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Delimiter = ";", // 使用分号作为分隔符
IgnoreBlankLines = true, // 忽略空白行
};
如果需要控制 CSV 列和类属性之间的映射关系,可以实现自定义映射类。
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}");
}
}
}
CsvHelper
提供了异常处理机制来处理 CSV 文件中的错误。
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}");
}
CsvHelper
是一个功能强大的库,提供了多种方式来读取和写入 CSV 文件。通过配置和自定义映射,可以轻松地处理不同格式的 CSV 文件。如果需要进行复杂的数据转换,CsvHelper
也能够满足需求。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有