使用 CsvHelper 作为合适的数据类型存储解析的 csv
storing parsed csv using CsvHelper as suitable datatype
如何将解析后的 csv 存储在合适的数据类型中以执行计算、查看等。我找到了一种名为 records.ToList 的方法,它看起来很有希望,但语法不正确。
class XLOperations
{
public static void ParseCSV() {
using (var reader = new StreamReader("data.csv"))
using (var csv = new CsvReader(reader, System.Globalization.CultureInfo.InvariantCulture))
{
var records = csv.GetRecords<dynamic>();
//here I want to store the parsed csv as a List<> or other suitable datatype to work with
}
}
}
}
最好的起点是 CsvHelper Getting Started 页面。
令人困惑的是 csv.GetRecords<dynamic>();
returns IEnumerable<dynamic>
将 yield 在您遍历 IEnumerable
对象时进行记录。这意味着您还没有得到项目列表,您得到的是一个枚举器,它跟踪您在获取记录的位置,并且只在您要求时 returns 它们。
您经常从磁盘获取 csv 文件,这可能是一项代价高昂的操作。假设您只想从一个有 5000 万条记录的文件中获取前 5 条记录。你可以打电话
var records = csv.GetRecords<dynamic>().Take(5).ToList();
这将遍历磁盘上的前 5 条记录,然后 return List<dynamic>
5 条记录。如果把ToList()
和Take(5)
颠倒过来,获取数据的方式就会大不相同
var records = csv.GetRecords<dymanic>().ToList().Take(5);
这将遍历 所有 磁盘上的 5000 万条记录并将它们存入内存。然后它将把这些记录中的前 5 条 return 作为 IEnumerable<dynamic>
给你
在获取这 5 条记录和使用更多内存方面,差异可能是几分之一秒与几分钟。
如何将解析后的 csv 存储在合适的数据类型中以执行计算、查看等。我找到了一种名为 records.ToList 的方法,它看起来很有希望,但语法不正确。
class XLOperations
{
public static void ParseCSV() {
using (var reader = new StreamReader("data.csv"))
using (var csv = new CsvReader(reader, System.Globalization.CultureInfo.InvariantCulture))
{
var records = csv.GetRecords<dynamic>();
//here I want to store the parsed csv as a List<> or other suitable datatype to work with
}
}
}
}
最好的起点是 CsvHelper Getting Started 页面。
令人困惑的是 csv.GetRecords<dynamic>();
returns IEnumerable<dynamic>
将 yield 在您遍历 IEnumerable
对象时进行记录。这意味着您还没有得到项目列表,您得到的是一个枚举器,它跟踪您在获取记录的位置,并且只在您要求时 returns 它们。
您经常从磁盘获取 csv 文件,这可能是一项代价高昂的操作。假设您只想从一个有 5000 万条记录的文件中获取前 5 条记录。你可以打电话
var records = csv.GetRecords<dynamic>().Take(5).ToList();
这将遍历磁盘上的前 5 条记录,然后 return List<dynamic>
5 条记录。如果把ToList()
和Take(5)
颠倒过来,获取数据的方式就会大不相同
var records = csv.GetRecords<dymanic>().ToList().Take(5);
这将遍历 所有 磁盘上的 5000 万条记录并将它们存入内存。然后它将把这些记录中的前 5 条 return 作为 IEnumerable<dynamic>
在获取这 5 条记录和使用更多内存方面,差异可能是几分之一秒与几分钟。