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.
答案 0 :(得分:0)
这是一种避免对循环中使用的数字进行硬编码的解决方案。在具有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"