【问题标题】:Powershell adds quotes to splitted CSV filePowershell 为拆分的 CSV 文件添加引号
【发布时间】:2019-06-08 14:37:41
【问题描述】:

我正在尝试按经度列的前几位拆分 csv 文件。这是一个示例:

X,Y,TYPE,SPEED,DirType,Direction
-44.058251,-19.945982,1,30,1,339
-54.629503,-20.497509,1,30,1,263
-54.646202,-20.496151,1,30,1,86

我没有 powershell 知识,但我在网上找到了一些脚本,它做了我想要的:

Import-Csv maparadar.csv 
| Group-Object -Property {($_.x)[0..2] -join ""} 
| Foreach-Object {$path=$_.name+".csv" ; $_.group 
| Export-Csv -Path $path -NoTypeInformation}

有了这个,我得到了像 -44.csv、-54.csv 这样的输出文件 但它会在输出文件中的每个字段中添加不需要的引号,例如:

"X","Y","TYPE","SPEED","DirType","Direction"
"-46.521991","-23.690235","1","30","1","169"
"-46.670774","-23.756021","1","30","1","281"
"-46.549897","-23.120720","1","30","1","99"

有什么方法可以在不添加引号的情况下导出 csv?

【问题讨论】:

  • 这是 CSV 文件应该采用的“官方”方式。 [grin] 不幸的是,当前版本的 PoSh 不允许禁用它。 [sigh ...] 如果你想删除它们,你需要使用Get-Content 加载文件,然后使用字符串替换运算符/方法之一来删除它们。
  • 我还没有尝试过,但是如果没有 -csv 开关,你会得到什么输出?我猜你应该得到一个未处理的 txt 文件(但扩展名为 csv,因为它在你的路径中指定)

标签: powershell csv


【解决方案1】:

以下应该提供所需的输出:

Import-Csv maparadar.csv | 
    Group-Object -Property {($_.x)[0..2] -join ""} | 
      Foreach-Object { $path=$_.name+".csv" ; ($_.group |
        ConvertTo-Csv -NoTypeInformation) -Replace '"' |
          Set-Content -Path $path }

说明:

我们将您的Export-Csv 替换为ConvertTo-Csv,它将CSV 输出提供给控制台/管道,而不是输出到文件。这些 CSV 格式的输出通过 -Replace 运算符发送以替换文字 " 字符。最后,使用Set-Content -Path $path 将格式化的输出发送到所需的文件。

【讨论】:

  • 如果数据中包含引号" 字符会怎样?
  • @lit, ($csv | convertto-csv -notype) -replace '(?<=,|^)"|"(?=,|$)' -replace '("){2,}','$1' 会这样做。不过,我没有在示例中看到额外的引号。
  • 如果值包含使用的分隔符,则还需要引号。去掉引号可能会导致 csv 文件不正确..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 2018-01-14
  • 2016-03-08
  • 2014-10-03
  • 1970-01-01
相关资源
最近更新 更多