Powershell 导出Csv添加不需要的标题双引号

Powershell 导出Csv添加不需要的标题双引号,powershell,csv,header,export-csv,Powershell,Csv,Header,Export Csv,我得到了一个源CSV文件(没有标题,所有列都用逗号分隔),我正在尝试根据第一列中的值将其拆分为单独的CSV文件,并使用该列值作为输出文件名 输入文件: S00000009,2016,M04 01/07/2016,0.00,0.00,0.00,0.00,0.00,0.00,750.00,0.00,0.00 S00000009,2016,M05 01/08/2016,0.00,0.00,0.00,0.00,0.00,0.00,600.00,0.00,0.00 S00000009,2016,M06 0

我得到了一个源CSV文件(没有标题,所有列都用逗号分隔),我正在尝试根据第一列中的值将其拆分为单独的CSV文件,并使用该列值作为输出文件名

输入文件:

S00000009,2016,M04 01/07/2016,0.00,0.00,0.00,0.00,0.00,0.00,750.00,0.00,0.00 S00000009,2016,M05 01/08/2016,0.00,0.00,0.00,0.00,0.00,0.00,600.00,0.00,0.00 S00000009,2016,M06 01/09/2016,0.00,0.00,0.00,0.00,0.00,0.00,600.00,0.00,0.00 S00000010,2015,W28 05/10/2015,2275.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00 S00000010,2015,W41 04/01/2016,0.00,0.00,0.00,0.00,0.00,0.00,568.75,0.00,0.00 S00000010,2015,W42 11/01/2016,0.00,0.00,0.00,0.00,0.00,0.00,568.75,0.00,0.00 S00000012,2015,W10 01/06/2015,0.00,0.00,0.00,0.00,0.00,0.00,650.00,0.00,0.00 S00000012,2015,W11 08/06/2015,0.00,0.00,0.00,0.00,0.00,0.00,650.00,0.00,0.00 S00000012,2015,W12 15/06/2015,0.00,0.00,0.00,0.00,0.00,0.00,650.00,0.00,0.00 输出文件:

s0000009.csv

"service_id","year","period","cash_exp","cash_inc","cash_def","act_exp","act_inc","act_def","comm_exp","comm_inc","comm_def" "S00000009","2016","M04 01/07/2016","0.00","0.00","0.00","0.00","0.00","0.00","750.00","0.00","0.00" "S00000009","2016","M05 01/08/2016","0.00","0.00","0.00","0.00","0.00","0.00","600.00","0.00","0.00" "S00000009","2016","M06 01/09/2016","0.00","0.00","0.00","0.00","0.00","0.00","600.00","0.00","0.00" "service_id","year","period","cash_exp","cash_inc","cash_def","act_exp","act_inc","act_def","comm_exp","comm_inc","comm_def" "S00000010","2015","W28 05/10/2015","2275.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00","0.00" "S00000010","2015","W41 04/01/2016","0.00","0.00","0.00","0.00","0.00","0.00","568.75","0.00","0.00" "S00000010","2015","W42 11/01/2016","0.00","0.00","0.00","0.00","0.00","0.00","568.75","0.00","0.00" 它使用第1列(服务id)中的头值生成新文件。 有两个问题

  • 输出CSV文件包含我不需要的标题行
  • 这些列用我不需要的双引号括起来

  • 首先,.csv文件需要标题和引号作为csv文件结构。但如果你不想要它们,你可以继续使用文本文件或

    $temp = Import-Csv INPUT_FILE.csv -Header service_id,year,period,cash_exp,cash_inc,cash_def,act_exp,act_inc,act_def,comm_exp,comm_inc,comm_def | Group-Object -Property "service_id" | 
            Foreach-Object {
            $path=$_.name+".csv"
            $temp0 = $_.group | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1
            $temp1 = $temp0.replace("""","")
            $temp1 > $path
    
            }
    
    但是这个输出不是一个“真正的”csv文件。
    希望这能有所帮助。

    对于您的特定场景,您可能可以使用更简单的方法。以纯文本文件的形式读取输入文件,通过拆分第一个字段将行分组,然后将组写入以组命名的输出文件:

    Get-Content 'INPUT_FILE.csv' |
        Group-Object { $_.Split(',')[0] } |
        ForEach-Object { $_.Group | Set-Content ($_.Name + '.csv') }
    
    另一个解决方案

    • 只使用数字而不使用命名标题(因为输出中不需要数字)
    • 避免不必要的临时文件
    • 仅删除分隔双引号的字段


    对于Q1,请看这里:,对于Q2,请看这里:谢谢Stef,它工作得非常好,输出文件的格式很好。可以强制将新创建的.csv文件输出到其他文件夹吗?默认为当前文件夹。我尝试在$path=$\uu.name+.csv行上指定一个子文件夹。我尝试了类似于$out\u file=\output\$\uu.name+.csv的方法。我已经解决了上一个问题(我已经将outpath定义为子文件夹)$path=$out\u path+'\'+$\uu.name+.csv
    Get-Content 'INPUT_FILE.csv' |
        Group-Object { $_.Split(',')[0] } |
        ForEach-Object { $_.Group | Set-Content ($_.Name + '.csv') }
    
    Import-Csv INPUT_FILE.csv -Header (1..12) | 
      Group-Object -Property "1" | Foreach-Object {
        ($_.Group | ConvertTo-Csv -NoType | Select-Object -Skip 1).Trim('"') -replace '","',',' | 
           Set-Content -Path ("{0}.csv" -f $_.Name) 
    }