代码之家  ›  专栏  ›  技术社区  ›  Clearest

Powershell-查询CSV列名并将其写入新的CSV

  •  0
  • Clearest  · 技术社区  · 6 年前

    因此,我试图查看CSV中的列名,将它们写入一个数组,然后将数据吐回一个新的CSV,并附加一个新列。只要我能在标题中添加一列,我就不在乎当前数据表是什么样子。这似乎是一件相当基本的事情,但我似乎找不到任何情况下有人这样做过。例如:

    "Name","Location","Phone"
    "John Smith","Toronto","555.555.5555"
    "Jane Doe","Dallas","555.555.5554"
    

    我只想保留姓名、位置和电话列名,并将它们放入另一个CSV中,再加一列。问题是,实际上有更多的列,但它们并不总是相同的,因此脚本需要能够与列名无关。我应该能够将任意数量的列以不同的名称提供给任何CSV,并且能够获得仅包含列名的输出文件。我尝试了至少十几种不同的方法来做到这一点,并不断遇到不同的问题。

    示例:

    $validatedfilepath = "validfile.csv"
    $csvData = New-Object PSObject
    $csvData = Import-CSV "file.csv" | Add-Member @{ID="$null"} -PassThru
    $csvdata = $csvdata | get-member -Name * -MemberType NoteProperty
    $csvData = @($csvData.Name)
    $csvData
    

    这将显示我希望在新validfile中显示的列名称的确切列表,但我不知道如何将其导出到CSV中作为列名。每次我尝试导出csv时,它要么给我每一行的字符长度计数,要么给我一些其他愚蠢的东西。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   TToni    6 年前

    这个 Export-CSV 从输入对象的成员中读取列名。因此,您已经走上了正确的道路,只需简化一下,如下所示:

    $csvData = Import-CSV "file.csv" | Add-Member @{ID="$null"} -PassThru
    # You can now modify/enrich/filter the data somehow, for example like $csvdata[0].ID = 56387, then just export it:
    $csvData | Export-CSV -NoTypeInformation -Path "newfile.csv"
    

    您所犯的错误是在中覆盖导入的数据 $csvdata 使用 Get-Member 后果然后用 @($csvData.Name) 表示