使用 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 条记录和使用更多内存方面,差异可能是几分之一秒与几分钟。