Powershell 导出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 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 输出文件: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
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文件结构。但如果你不想要它们,你可以继续使用文本文件或
$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)
}