我正在合并许多大型CSV文件,例如在跳过前导垃圾并将文件名附加到每一行时:
Get-ChildItem . | Where Name -match "Q[0-4]20[0-1][0-9].csv" |
Foreach-Object {
$file = $_.BaseName
Get-Content $_.FullName | select-object -skip 3 | % {
"$_,${file}" | Out-File -Append temp.csv -Encoding ASCII
}
}
在PowerShell中,即使在i7 / 16GB的机器上,这个过程非常缓慢(每分钟约5兆字节)。我应该如何提高效率或者考虑换用Python?
Out-File -Append
,也就是为了CSV中的每一行都写入磁盘。更好的方法是将所有文件加载到内存中,进行必要的操作,然后一次性输出合并后的CSV。 - G42Streamreader
会获得更好的性能提升。Get-Content
在处理较大的文件时会变得很慢。 - Matt