【问题标题】:How to remove double quotes on specific column from CSV file using Powershell script如何使用 Powershell 脚本从 CSV 文件中删除特定列上的双引号
【发布时间】:2014-02-20 09:07:09
【问题描述】:
"ID","Full Name","Age"

"1","Jone Micale","25"

这里是我创建的 CSV 文件的示例,现在我只想从 IDAge 列值中删除双引号。

我尝试了不同的方法,但我不想从中创建新文件。我只想使用 PowerShell v1 更新文件。

【问题讨论】:

  • 您能解释一下这样做的原因吗?我确信有一个非常好的解释,但上面是一个完全“有效”的 csv(虽然 csv 不是非常标准化,当然,通常接受用引号字符包装列)。是为了获取较小的文件还是为了导入数据,如果是这样,为什么仅仅因为引号字符而无法导入数据?
  • 上面的例子是我的 csv 文件的样例。其中有许多可用的字段,我只是想删除特定字段(如 ID 和年龄)上的双引号。我不想删除全名字段上的双引号。我将在另一个 DQM 活动中使用这个 csv。

标签: powershell powershell-1.0


【解决方案1】:

Export-Csv 将始终将所有字段放在双引号中,因此您必须以艰难的方式删除不需要的引号。这样的事情可能会奏效:

$csv = 'C:\path\to\your.csv'
(Get-Content $csv) -replace '^"(.*?)",(.*?),"(.*?)"$', '$1,$2,$3' |
    Set-Content $csv

正则表达式分解:

  • ^$ 分别匹配字符串的开头和结尾(Get-Content 返回包含文件行的数组)。
  • "(.*?)" 匹配两个双引号之间的文本,并在一个组中捕获匹配项(不包括双引号)。
  • ,(.*?), 匹配两个逗号之间的文本并捕获组中的匹配项(包括双引号)。
  • $1,$2,$3 用逗号分隔的第一组、第二组和第三组替换匹配字符串。

【讨论】:

  • 嘿thanx Ansgar....很好的解决方案。由于我是 PowerShell 的新手,请您为我详细说明一下这个逻辑。提前感谢
  • 这意味着我的 CSV 中有多少字段,我必须在脚本中插入那么多“(。*?)”和 $4.... 一些数字?
  • 在上面的逻辑中,您实际上是在说 power-shell 删除双引号吗?你能告诉我吗?
  • 嗨 Ansgar,这个逻辑不适用于大尺寸或内容文件数据。 :( 我在大文件上试过,但它只删除标题双引号。请告诉我解决方案。
  • @pputil 以上不是通用解决方案。在其当前形式中,它从具有 3 个字段的 CSV 的第一个和最后一个字段中删除双引号。如果您的输入数据看起来不同,则需要相应地调整模式。
猜你喜欢
  • 2015-07-26
  • 2020-06-25
  • 2022-01-20
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
相关资源
最近更新 更多