gpt4 book ai didi

powershell - 使用 PowerShell 导入和导出 CSV,所有列都用双引号引起来

转载 作者:行者123 更新时间:2023-12-03 09:08:19 34 4
gpt4 key购买 nike

我正在使用下面的代码导入和导出到 CSV。我进行导出的原因是因为我需要导出的 CSV 中的所有列都用双引号引起来。但在下面的代码中,双引号仅出现在每行的第一行和最后一行。

Import-Csv c:\Emp.csv | Export-Csv c:\Emp1.csv -NoTypeInformation -Force

请注意,我已经尝试过以下代码(该代码有效,但如果 CSV 大小 > 200MB,则需要更长的时间):

$inform = Get-Content C:\A.csv 
$inform | % {
$info = $_.ToString().Replace("|", """|""")
$info += """"
$var = """" + $info
$var | Out-File D:\B.csv -Append
}

示例输入(CSV 文件):

1|A|Test|ABC,PQR

示例输出(CSV 文件):

"1"|"A"|"Test"|"ABC,PQR"

最佳答案

Export-Csv 本身已经在每个字段周围添加了双引号,因此您需要做的就是指示它使用正确的分隔符:

Import-Csv 'C:\path\to\input.csv' -Delimiter '|' |
Export-Csv 'C:\path\to\output.csv' -Delimiter '|' -NoType

但是,Export-Csv 会不加区别地在所有字段周围添加引号,因此,如果您想有选择地在特定字段周围添加引号,则需要一个自定义例程:

$reader = New-Object IO.StreamReader 'C:\path\to\input.csv'
$writer = New-Object IO.StreamWriter 'C:\path\to\output.csv'

while ($reader.Peek() -ge 0) {
$line = $reader.ReadLine().Split('|')
for ($i=0; $i -lt $line.Count; $i++) {
if ($line[$i] -like '*,*') {
$line[$i] = '"{0}"' -f $line[$i]
}
}
$writer.WriteLine(($line -join '|'))
}

$reader.Close(); $reader.Dispose()
$writer.Close(); $writer.Dispose()

关于powershell - 使用 PowerShell 导入和导出 CSV,所有列都用双引号引起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45011963/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com