CSV文件中的新列非常慢

时间:2019-04-03 14:42:50

标签: powershell csv

我有一堆.csv文件,我试图添加一些新的列标题及其值(无论如何都是空白),然后将其输出到新的.csv文件。我的脚本当前可以运行并且可以正常工作,但是大约需要5分钟才能完成对具有约70,000行的60MB文件的操作-我大约有100个文件可以执行此操作,因此使用此脚本需要一段时间。 我的代码如下,它很简单,但效率很低!

Import-Csv $strFilePath |
    Select-Object *, @{Name='NewHeader';Expression={''}},
        @{Name='NewHeader2';Expression={''}},
        @{Name='NewHeader3';Expression={''}},
        @{Name='NewHeader4';Expression={''}} |
    Export-Csv $($strFilePath + ".new") -NoTypeInformation

1 个答案:

答案 0 :(得分:0)

正如评论中指出的那样,我认为最好将其视为简单文本而不进行无用的转换。

$path = 'C:\test'
$newHeaders = 'NewHeader1','NewHeader2','NewHeader3','NewHeader4'

$files = Get-ChildItem -LiteralPath $path -Filter *.csv

$newHeadersString = @(''; $newHeaders | foreach { '"{0}"' -f $_ }) -join ','
$newColmunsString = ',""' * $newHeaders.Count

foreach ($file in $files) {
    $sr = $file.OpenText()
    $outfile = New-Item ($file.FullName + '.new') -Force
    $sw = [IO.StreamWriter]::new($outfile.FullName)

    $sw.WriteLine($sr.ReadLine() + $newHeadersString)
    while(!$sr.EndOfStream) { $sw.WriteLine($sr.ReadLine() + $newColmunsString) }

    $sr.Close()
    $sw.Close()
}