gpt4 book ai didi

PowerShell Get-Content 基本操作太慢

转载 作者:行者123 更新时间:2023-12-03 14:07:52 29 4
gpt4 key购买 nike

我正在合并很多大型 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?

最佳答案

Get-Content/Set-Content大文件很糟糕。当性能是关键时,流是一个很好的选择。因此,考虑到这一点,让我们使用一个来读取每个文件,然后使用另一个来写出结果。

$rootPath = "C:\temp"
$outputPath = "C:\test\somewherenotintemp.csv"
$streamWriter = [System.IO.StreamWriter]$outputPath
Get-ChildItem $rootPath -Filter "*.csv" -File | ForEach-Object{
$file = $_.BaseName
[System.IO.File]::ReadAllLines($_.FullName) |
Select-Object -Skip 3 | ForEach-Object{
$streamWriter.WriteLine(('{0},"{1}"' -f $_,$file))
}
}
$streamWriter.Close(); $streamWriter.Dispose()

创建写入流 $streamWriter输出每个文件中编辑过的行。我们可以读入文件并批量写入文件,这样会更快,但我们需要忽略几行并对每一行进行更改,以便逐行处理更简单。避免在此期间向控制台写入任何内容,因为它只会减慢一切。

什么 '{0},"{1}"' -f $_,$file do 是引用最后一个“列”,以防基本名称包含空格。

关于PowerShell Get-Content 基本操作太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47349306/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com