Powershell 使用 ConvertFrom-Csv 解析带有换行符的管道 CSV 数据

标签 powershell csv

当尝试解析字段内带有换行符的 CSV 数据时,ConvertFrom-Csv 将无法正常工作。这是一个例子:


测试.csv

name,address
John Doe,"123 Easy Way
Apt. 10
Somewhere, USA"
Jane Doe,"456 Main St
Unit 5
SomewhereElse, USA"

正确解析

> Import-Csv test.csv

name     address
----     -------
John Doe 123 Easy Way...
Jane Doe 456 Main St...

解析不当

> Get-Content test.csv | ConvertFrom-Csv

name          address
----          -------
John Doe      123 Easy Way
Apt. 10
Somewhere     USA"
Jane Doe      456 Main St
Unit 5
SomewhereElse USA"

如此处所示,换行符被解析为新记录而不是字段中的换行符。你是如何解决这个问题的?

最佳答案

尝试解析字段内带有换行符的 CSV 数据时,使用 ConvertFrom-Csv 方法会出现问题。这是因为换行符用作分隔符而不是传递给 ConvertFromCsv 方法。 根据您获取 CSV 的方式,解决此问题的方法会有所不同:

使用 -Raw 开关正确解析

PS> Get-Content -raw test.csv | ConvertFrom-Csv

name     address
----     -------
John Doe 123 Easy Way...
Jane Doe 456 Main St...

虽然这适用于 Get-Content 命令,但不适用于可能将 CSV 返回到管道的任意命令。要处理这些情况,请通过“Out-String”命令通过管道输出。

正确的管道解析

我发现有 2 种变体可以工作:

PS> <command> | Out-String | ConvertFrom-Csv

下面这个方法感谢#Powershell 中的sifb。它有点“hacky”,但工作得很好并且可以使用它。

PS> (<command>) -join "`r`n" | ConvertFrom-Csv

关于Powershell 使用 ConvertFrom-Csv 解析带有换行符的管道 CSV 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53218416/

相关文章:

arrays - 使用 PowerShell 确定一个数组中的任何字符串是否存在于第二个字符串数组中

powershell - 您最喜欢的 Powershell Cmdlet 是什么?

powershell - 使用 PowerShell 随机 WebRequest 结果

StringIO 的 Ruby CSV BOM|UTF-8 编码

csv - 使用COPY命令的Redshift错误1202 “Extra column(s) found”

.net - Powershell 对象 [] 到 .Net 集合?

regex - 删除批处理或 PoSh 的引号之间的逗号

python - 使用 pyodbc 和 pandas 将 CSV 加载到 .mdb

python - 在 python 中解析文本文件并输出到 CSV

python - python的pandas插件在canopy环境中不排序?