我需要在 PowerShell 中处理具有重复列标题的 csv 文件。他们有重复列的原因超出了我的范围。这就是人生。
我想使用 Import-Csv 以便可以轻松处理数据,但由于存在重复列,我收到此错误:
Import-Csv : The member "PROC STAT" is already present.
At C:\Users\MyName\Documents\SomeFolder\testScript1.ps1:10 char:9
+ $csv2 = Import-Csv $files[0].FullName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Import-Csv], ExtendedTypeSystemException
+ FullyQualifiedErrorId : AlreadyPresentPSMemberInfoInternalCollectionAdd,Microsoft.PowerShell.Commands.ImportCsvCommand
Run Code Online (Sandbox Code Playgroud)
我可以通过进入每个 csv 文件并删除重复的列来手动修复问题。但这不是一个选择。它们有数百个,并且脚本需要定期运行。理想情况下,我正在寻找一种方法以编程方式删除该列(Import-Csv 不起作用)或以编程方式更改该列的名称(以便我可以 Import-Csv 并将其删除)。有什么建议么?
我的代码循环遍历所有文件:
$files = Get-ChildItem "C:\Users\MyName\Documents\SomeFolder\Data" -Filter *.csv
foreach($file in $files) {
$csv = Import-Csv $file.FullName
}
Run Code Online (Sandbox Code Playgroud) 我在使用PowerShell创建/填充csv文件时遇到了一些麻烦.我是powershell的新手,所以我可能会遗漏一些明显的东西,所以请放轻松我.情况如下:
首先,我创建一个数组(?)作为我的表
#Create output table with headers
$output = @()
$row = New-Object System.Object
$row | Add-Member -MemberType NoteProperty -Name "Example Header 1" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "Example Header 2" -Value $null
$row | Add-Member -MemberType NoteProperty -Name "Example Header 3" -Value $null
$output += $row
Run Code Online (Sandbox Code Playgroud)
我正在使用它将其写入文件
$output | Export-Csv new.csv -NoTypeInformation
这似乎是一个带有我想要的标题的csv文件.如果有更好的方法,请告诉我.下一步是我遇到问题的地方.我现在需要以编程方式用数据填充表.导入现有的csv文件时,我能够像数组一样访问/修改表中的数据(即$output[rowIndex]."Header Name" = "new data").
所以我尝试将数据添加到我新创建的表中.我写道$ouput[0]."Example Header 1" = "Test Data".这符合我的预期,并使用"测试数据"填充指定标题的列中的第一行.但是,我只能访问[0].$output[1]等等导致错误,因为我猜它们不存在.我$output += $row再次尝试使用添加更多行,但它根本不起作用并导致一些奇怪的错误发生(如果我写入一行,它会写入所有行,可能是因为它的所有相同的对象).
所以基本上我的问题是,如何从头开始创建一个csv文件,为它添加一些标题,然后开始写入所有(未知/可变数量的)行?我确信有更好的方法可以做到,但就像我说的那样,我对powershell很新.理想情况下,我希望能够通过索引(0,1,2等)访问行,但我对任何事情都持开放态度. …