gpt4 book ai didi

powershell - 清理格式不正确的csv文件

转载 作者:行者123 更新时间:2023-12-03 01:13:41 32 4
gpt4 key购买 nike

我正在从共享点下载xlsx文件,然后将其转换为csv文件。但是,由于xlsx文件包含未删除的空列,因此将其导出到csv文件,如下所示...

columnOne,columnTwo,columnThree,,,,
valueOne,,,,,,
,valueTwo,,,,,
,,valueThree,,,,
如您所见,由于存在额外的空标题,Import-Csv cmdlet将对该文件失败。我想知道最后如何计算多余的逗号。列数总是在变化,列名也总是在变化。因此,我们从最后一个非空标题号开始计数。
现在,我正在做以下事情...
$csvFileEdited = Get-Content $csvFile

$csvFileEdited[0] = $csvFileEdited[0].TrimEnd(',')

$csvFileEdited | Set-Content "$csvFile-temp"
Move-Item "$csvFile-temp" $csvFile -Force
Write-Host "Trim Complete."
这将使文件输出像这样...
columnOne,columnTwo,columnThree
valueOne,,,,,,
,valueTwo,,,,,
,,valueThree,,,,
现在已为Import-Csv接受了命名,但是如您所见,仍然存在多余的空值,因为每行的空值都为空。
如果我执行以下代码...
$csvFileWithExtraCommas = Get-Content $csvFile
$csvFileWithoutExtraCommas = @()

FOrEach ($line in $csvFileWithExtraCommas)
{
$line = $line.TrimEnd(',')
$csvFileWithoutExtraCommas += $line
{

$csvFileWithoutExtraCommas | Set-Content "$csvFile-temp"
Move-Item "$csvFile-temp" $csvFile -Force
Write-Host "Trim Complete."
然后,它将删除应该为null的null值,因为它属于非null标题名称。这样的输出。
columnOne,columnTwo,columnThree
valueOne
,valueTwo
,,valueThree
这是所需的输出:
columnOne,columnTwo,columnThree
valueOne,,
,valueTwo,
,,valueThree
有人能帮忙吗?
更新资料
我正在使用以下代码来计算额外的空标题...
$csvFileWithCommas = Get-Content $csvFile

[int]$csvFileWithExtraCommasNumber = $csvFileWithCommas[0].Length

$csvFileTitlesWithoutExtraCommas = $csvFileWithCommas[0].TrimEnd(',')

[int]$csvFileWithoutExtraCommasNumber = $csvFileTitlesWithoutExtraCommas.Length

$numOfCommas = $csvFileWithExtraCommasNumber - $csvFileWithoutExtraCommasNumber
$numOfCommas的值输出为 4。现在的问题是,我怎样才能使用$ line.TrimEnd(',')只这样做4次?

最佳答案

好吧....如果您确实需要这样做,则可以从 header 算起尾随的逗号,然后使用正则表达式从每行末尾删除尽可能多的逗号。还有其他字符串操作方法,但是这种情况下的正则表达式非常干净。

请注意Bluecakes answer显示的内容就足够了。可能还有其他一些隐藏字符未在问题中复制,或者您的真实文件中没有编码问题。

$file = Get-Content "D:\temp\text.csv"
# Number of trailing commas. Compare the length before and after the trim
$numberofcommas = $file[0].Length - $file[0].TrimEnd(",").Length
# Use regex to remove as many commas from the end of each line and convert to csv object.
$file -replace ",{$numberofcommas}$" | ConvertFrom-Csv

正则表达式在每行的末尾寻找X逗号,其中X是 $numberofcommas。在我们的情况下,它看起来像 ,{4}$
上面的代码使用的源文件是这样生成的
@"
columnOne,columnTwo,columnThree,,,,
valueOne,,,,,,
,valueTwo,,,,,
,,valueThree,,,,
"@ | set-content D:\temp\text.csv

关于powershell - 清理格式不正确的csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424762/

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