【问题标题】:How to process large CSV file in powershell如何在 Powershell 中处理大型 CSV 文件
【发布时间】:2012-05-30 12:22:39
【问题描述】:

我正在尝试查找 csv 文件中高于某个值的行数。我的代码类似于

$T6=Import-Csv $file | Where-Object {$_."Value" -ge 0.6 } | Measure-Object

这适用于较小的文件,但对于较大的 csv 文件(1 GB 或更多),它将永远运行。有没有更好的方法在powershell中解析这样的csv文件?

【问题讨论】:

  • 请编辑您的帖子以量化“非常缓慢”和“大型 CSV 文件”。祝你好运。

标签: powershell csv


【解决方案1】:

Import-Csv 是用于此目的的官方 cmdlet。不过有一条评论,导入的所有内容都是字符串,因此您最好将 Value 属性转换为正确的类型。例如:

$T6 = Import-Csv $file | Where-Object { [float]$_.Value -ge 0.6 } | Measure-Object

【讨论】:

  • 铸造价值将显着提高性能。刚刚测试了这个。从字面上将性能提高 1000 倍。
  • 用你的 import-csv 和你的演员,它相当于大文件上的 ReadAllText 解决方案?
【解决方案2】:

为了处理大文件时的速度考虑使用流式阅读器,Roman 的回答 here 演示了用法。

【讨论】:

    【解决方案3】:

    你可以尝试摆脱Import-Csv

    $values = ([System.IO.File]::ReadAllText('c:\pst\New Microsoft Office Excel Worksheet.csv')).Split(";") | where {$_ -ne ""}
    
    $items = New-Object "System.Collections.Generic.List[decimal]" 
    
    foreach($value in $values)
    {
        [decimal]$out = New-Object decimal
        if ([System.Decimal]::TryParse($value, [ref] $out))
          {
             if ($out -ge 10){$items.Add($out)}
          } 
       }
    $items | Measure-Object
    

    【讨论】:

      猜你喜欢
      • 2015-10-10
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2018-01-18
      • 2012-11-30
      • 2018-02-23
      相关资源
      最近更新 更多