【问题标题】:Convert csv to a table in Powershell将 csv 转换为 Powershell 中的表格
【发布时间】:2021-05-16 06:16:40
【问题描述】:

我有一个下面格式的 csv,需要转换为 json 或表格,以便我可以轻松解析它并稍后在我的代码中使用这些值作为参数

Directory     : \\foo\foofoo\nightly.188\share\name
Name          : name.pst
Length        : 271360
CreationTime  : 6/4/2009 2:42:21 PM
LastWriteTime : 6/9/2011 8:58:50 AM

Directory     : \\foo\foofoo\nightly.188\share\name
Name          : name2.pst
Length        : 71123968
CreationTime  : 10/5/2010 2:41:56 PM
LastWriteTime : 8/1/2011 4:08:32 PM

我尝试过使用 Format-List 和 Format-Table 但没有帮助。

任何意见将不胜感激。

我希望输出采用表格结构:

目录名称长度 CreationTime LastWriteTime \foo\foofoo\nightly.188\share\name name.pst 271360 2009 年 6 月 4 日下午 2:42:21 2011 年 8 月 1 日下午 4:08:32 \foo\foofoo\nightly.188\share\name name2.pst 71123968 2010 年 10 月 5 日下午 2:41:56 2011 年 8 月 1 日下午 4:08:32

【问题讨论】:

  • “我已经尝试过” -- 请编辑问题以添加您尝试过的代码。否则人们只能猜测哪里出了问题(有些人甚至可能认为你实际上什么都没尝试)。
  • 下面的格式没有显示任何类似于 CSV 格式的内容。充其量,这是Import-Csv -Path 'theFile.csv | Format-List' 的输出

标签: json powershell csv


【解决方案1】:

Format-List 和 Format-table 将您的数据转换为适合在控制台上显示或复制到文本文件的形式。这对于解析很有用,但不适用于将数据作为参数传递。如果您只是像这样进行导入:

Import-Csv myfile.csv

Powershell 会在将其放入控制台之前为您执行隐式格式表或格式列表。

如果要将内容用作参数,请注意 csv 文件的内容将转换为 PSCustomObject 数组。每个 PSCustomObject 都具有与 CSV 文件标题中提供的字段名称相同名称的属性。

Import-Csv thefile.csv | % {
    "The file $($_.name) contains:"
    Get-Content $_.name
}

【讨论】:

    【解决方案2】:

    要将 CSV 数据作为表格查看到控制台,请执行以下操作

    $sorceFile = "D:\temp\source.csv"
    Import-Csv $sorceFile | Format-Table -AutoSize
    

    如果您想交互式查看数据,也可以使用“Out-GridView”命令

    $sorceFile = "D:\temp\source.csv"
    Import-Csv $sorceFile | Out-GridView
    

    下面将CSV数据转换为Json数据

    $sorceFile = "D:\temp\source.csv"
    $JsonData = Import-Csv $sorceFile | ConvertTo-Json
    $JsonData
    

    然而,这只是一个字符串。如果您想进一步处理 CSV 文件中的数据,请执行以下操作以保存到变量中。

    $sorceFile = "D:\temp\source.csv"
    $CsvData= Import-Csv $sorceFile
    
    # view formatted table in console
    $CsvData | format-table
    
    #example data query 
    $CsvData | Where-Object{$_.Name -eq 'name.pst'}
    
    #example loop
    foreach ($row in $CsvData) {
        Write-Output "Name: $($row.name) CreationTime: $(get-date $row.CreationTime -Format 'dddd MM/dd/yyyy HH:mm K')"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2020-06-10
      相关资源
      最近更新 更多