【问题标题】:How to export to "non-standard" CSV with Powershell如何使用 Powershell 导出到“非标准”CSV
【发布时间】:2015-07-30 19:56:14
【问题描述】:

我需要转换这种格式的文件:

2015.03.27,09:00,1.08764,1.08827,1.08535,1.08747,8941 2015.03.27,10:00,1.08745,1.08893,1.08604,1.08762,7558

转成这种格式

2015.03.27,1.08764,1.08827,1.08535,1.08747,1
2015.03.27,1.08745,1.08893,1.08604,1.08762,1

我从这段代码开始,但看不到如何实现完整的转换:

    Import-Csv in.csv -Header Date,Time,O,H,L,C,V | Select-Object Date,O,H,L,C,V | Export-Csv -path out.csv -NoTypeInformation
    (Get-Content out.csv) | % {$_ -replace '"', ""} | out-file -FilePath out.csv -Force -Encoding ascii

哪个输出

日期,O,H,L,C,V
2015.03.27,1.08745,1.08893,1.08604,1.08762,8941
2015.03.27,1.08763,1.08911,1.08542,1.08901,7558

之后我需要

  • 删除标题(我试过 -NoHeader 无法识别)
  • 用 1 替换最后一列。

如何尽可能简单地做到这一点(如果可能,无需遍历每一行)

更新:最后我简化了要求。我只需要用常量替换最后一列。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    好的,这可能是一个巨大的单线...不过,出于理智的原因,我将在管道上换行。

    Import-Csv in.csv -header Date,Time,O,H,L,C,V|select * -ExcludeProperty time|
        %{$_.date = [datetime]::ParseExact($_.date,"yyyy.MM.dd",$null).tostring("yyMMdd");$_}|
        ConvertTo-Csv -NoTypeInformation|
        select -skip 1|
        %{$_ -replace '"'}|
        Set-Content out.csv -encoding ascii
    

    基本上我导入 CSV,排除时间列,将日期列转换为实际的 [datetime] 对象,然后将其转换回所需的格式。然后我将修改后的对象(带有新格式化的日期)通过管道传递给ConvertTo-CSV,并跳过第一行(你不想要的标题),然后从中删除引号,最后输出到文件使用Set-Content(比Out-File 快)

    编辑:刚刚看到您的更新...为此,我们只需将最后一列更改为 1,同时我们通过添加 $_.v=1;...修改日期列...

            %{$_.date = [datetime]::ParseExact($_.date,"yyyy.MM.dd",$null).tostring("yyMMdd");$_.v=1;$_}|
    

    整个脚本修改:

    Import-Csv in.csv -header Date,Time,O,H,L,C,V|select * -ExcludeProperty time|
        %{$_.date = [datetime]::ParseExact($_.date,"yyyy.MM.dd",$null).tostring("yyMMdd");$_.v=1;$_}|
        ConvertTo-Csv -NoTypeInformation|
        select -skip 1|
        %{$_ -replace '"'}|
        Set-Content out.csv -encoding ascii
    

    哦,这还有一个额外的好处,那就是不必读入文件、将文件写入驱动器、读入该文件,然后再次将文件写入驱动器。

    【讨论】:

    猜你喜欢
    • 2013-07-15
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2019-06-09
    相关资源
    最近更新 更多