如何在CSV文件中重命名列标题?

11

我不知道如何在Windows PowerShell中重命名CSV文件中的列标题。我可以添加新行、删除行、填充和导出,但找不到如何更改标题值的方法。

我曾尝试导入CSV文件并指定标题后再导出,但这种方法行不通:

import-csv c:\tmp\test.csv | Select-Object first_name | Export-Csv -header "test" c:\tmp\test1.csv

我基本上需要重新格式化一个CSV文件,因此如果我可以选择我想要的数据并指定新的标题,那就太完美了。

3个回答

15

您可以使用带有计算属性Select-Object 来完成此操作:

Import-Csv test.csv |
    Select-Object @{ expression={$_.first_name}; label='test' } |
        Export-Csv -NoTypeInformation test1.csv

10

你不能试试像这样的东西吗?

import-csv 'c:\tmp\test.csv'  | select -Property @{name="test";expression={$($_.first_name)}}| Export-Csv c:\tmp\test1.csv

0

当您需要更改一个或多个列而无需为每个列硬编码时,这是另一种方法:

function Convert-Object($rec){
    $object = New-Object System.Object
    $members = ($rec[0].psobject.Members | ?{$_.MemberType -match "Property"}).Name.Trim()
    foreach($mem in $members){
        if($mem -eq 'File Number'){
            $object | Add-Member -MemberType NoteProperty -Name "FileNumber" -Value $rec.'File Number'
        }else{
            $object | Add-Member -MemberType NoteProperty -Name $mem -Value $rec.$mem
        }
    }
    return $object 
}

$convCSV   = ($CSVs | ?{$_.Name -match "YourCsvName"}).FullName #multiple CSVs perhaps
$toConvert = Import-Csv $convCSV
$convObjs  = New-Object System.Collections.ArrayList
$toConvert | foreach{$convObjs += Convert-Object -rec $_}
$convObjs  | Export-Csv $convCSV -NoTypeInformation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接