我有一堆.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
答案 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()
}