【问题标题】:Issues breaking up huge CSV file using PowerShell使用 PowerShell 分解巨大的 CSV 文件的问题
【发布时间】:2019-04-23 01:23:19
【问题描述】:

Example of data 我正在尝试将一个大的 CSV 文件分解成更小的文件。原始文件:5,055,000行excel数据。所需文件:每个文件 500,000 行数据。但是,无论如何,我绝对无法解决 2 个反复出现的错误。

我要做的是打开一个 CSV 文件,最多导入 500,000 行,然后立即将它们导出为一系列新的 CSV 文件,每 500k 生成一个新文件。

$sourceCSV = "E:\Data\032110-26AM.CSV"
$startrow = 0 ;
$counter = 1 ;
while ($startrow -lt5055000)
{

Import-CSV $sourceCSV | select-object -skip $startrow -first 500000 | Export-CSV "E:\Data\032110-26AM_SPLITFILE2$($counter).csv" -NoClobber;

$startrow += 500000 ;
$counter++ ;
}

我希望代码通过我的文件,并创建 11 个较小的文件。但是,我收到以下错误:

At line:7 char:62
+ ... mport-CSV $sourceCSV | select-object -skip $startrow -first <500000>  ...
+                     ~
The '<' operator is reserved for future use.

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    这是一种避免对循环内使用的数字进行硬编码的解决方案。在具有 500 行的 CSV 上进行测试。调整以适合您的文件路径、数字等...

    $sourceCSV = "C:\scripts\test.csv"
    $startrow = 0
    $endrow = 500
    $readcount = 50
    $counter = 1
    while ($startrow -lt $endrow)
    {
    Import-CSV $sourceCSV | Select-Object -Skip $startrow -First $readcount | Export-CSV $("C:\scripts\test_"+"$counter.csv") -NoClobber -NoTypeInformation
    $startrow = $startrow + $readcount
    $counter++
    }
    

    您的使用可能需要也可能不需要-NoTypeInformation,但我发现如果您要将结果输入到其他 PowerShell 脚本以外的其他内容中,这会很有帮助,因为许多工具无法识别带有额外字符的格式顶部的信息行。

    巧合的是,您的原始“CSV”文件顶部有一些多余的行,因此您需要先删除它们。这是一种方法,与我的原始答案保持一致。我还根据要求添加了一项调整,以应对不可预测的文件大小。

    $initialsourceCSV = "C:\scripts\testwithjunk.csv"
    $initialskip = 6
    Get-Content $initialsourceCSV | Select-Object -Skip $initialskip | Out-File -FilePath "C:\scripts\temp.csv"
    $sourceCSV = "C:\scripts\temp.csv"
    $startrow = 0
    $endrow = (get-content $sourceCSV).Length
    $readcount = 50
    $counter = 1
    while ($startrow -lt $endrow)
    {
    Import-CSV $sourceCSV | Select-Object -Skip $startrow -First $readcount | Export-CSV $("C:\scripts\test_"+"$counter.csv") -NoClobber -NoTypeInformation
    $startrow = $startrow + $readcount
    $counter++
    }
    Remove-Item "C:\scripts\temp.csv"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2020-08-05
      • 1970-01-01
      • 2013-12-31
      • 2015-06-02
      相关资源
      最近更新 更多