Новые столбцы в CSV-файле невероятно медленно - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть куча файлов .csv, и я пытаюсь добавить некоторые новые заголовки столбцов и их значения (которые все равно остаются пустыми), а затем вывести их в новый файл .csv.Мой сценарий в настоящее время работает и работает нормально, но для завершения операции над 60-мегабайтным файлом с 70000 строками требуется около 5 минут - у меня есть около 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 голосов
/ 04 апреля 2019

Как отмечено в комментариях, я думаю, что было бы лучше рассматривать его как простой текст без бесполезного преобразования.

$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()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...