簡體   English   中英

循環瀏覽大量CSV文件

[英]Loop through huge CSV files

我必須遍歷每天約有50.000行的文件,以生成報告並將這些數據記錄導入到我們的數據庫中

由於我必須執行一些-replace statements和其他內容,因此我目前通過foreach在每一行中循環。 此方法在約16分鍾后完成:

$csv_file = ".\testfile.csv"
$csv_import = Import-Csv $csv_file -Delimiter ";" -Encoding "default"

function Import-CsvVersion1 {
    $results = @()

    foreach ($data in $csv_import) {
        $properties = [ordered]@{
            id          = $data."id"
            name        = $data."name"
            description = $data."description"
            netcost     = $data."netcost"
            rrp         = $data."rrp"
        }
        $results += New-Object PSObject -Property $properties
    }

    # Export $results into final csv
}

我發現了另一種方法,其中foreach的結果將直接分配給$results變量。 此方法在約8分鍾后完成(因此只需要一半的時間):

$csv_file = ".\testfile.csv"
$csv_import = Import-Csv $csv_file -Delimiter ";" -Encoding "default"

function Import-CsvVersion2 {
    $results = foreach ($data in $csv_import) {
        [PSCustomObject]@{
            id          = $data."id"
            name        = $data."name"
            description = $data."description"
            netcost     = $data."netcost"
            rrp         = $data."rrp"
        }
    }

    # Export $results into final csv
}

我讀過某個地方的文章,說通過ForEach-Object進行循環可能會更快-不幸的是,我不知道如何開始。

感謝@GuentherSchmitz,我得以創建第三個測試函數。 在下一個測試中,我使用了一個帶有〜2.000行的CSV文件,結果如下:

  • Import-CsvVersion1 > 4分鍾24秒
  • Import-CsvVersion2 > 0分鍾18秒
  • Import-CsvVersion3 > 1分鍾20秒

再次感謝您的幫助 :-)

PS:我還擺脫了以前的Write-Progress ,它顯然使腳本速度降低了約80%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM