gpt4 book ai didi

csv - 循环浏览CSV文件并验证每一行的列数

转载 作者:行者123 更新时间:2023-12-02 23:58:07 27 4
gpt4 key购买 nike

我是PowerShell的新手,并一直试图遍历CSV文件并返回每一行的列数。比较该列数与第一行,并发生一些不相等的情况。在这种情况下,请完全替换逗号。然后使用更改创建一个新文件。

$csvColumnCount = (import-csv "a CSV file" | get-member -type NoteProperty).count

$CurrentFile = Get-Content "a CSV file" |
ForEach-Object { $CurrentLineCount = import-csv "a CSV file" | get-member -type NoteProperty).count
$Line = $_
if ($csvColumnCount -ne $CurrentLineCount)
{ $Line -Replace "," , "" }
else
{ $Line } ;
$CurrentLineCount++} |
Set-Content ($CurrentFile+".out")
Copy-Item ($CurrentFile+".out") $ReplaceCSVFile

最佳答案

如果您打算检查CSV文件的哪些行无效,则只需使用简单的拆分和计数,如下所示:

$csv = Get-Content 'your_file.csv'
$count = ($csv[0] -split ',').count
$csv | Select -Skip 1 | % {
if(($_ -split ',').count -eq $count) {
...do valid stuff
} else {
...do invalid stuff
}
}

为了进行CSV检查,请避免使用CSV cmdlet,因为这些cmdlet倾向于尝试纠正问题,例如:
$x = @"
a,b,c
1,2,3,4
"@

$x | ConvertFrom-Csv

> a b c
- - -
1 2 3

另外,我认为您的代码流程有些混乱。您尝试将管道的结果返回到名为$ CurrentFile的变量,而在该管道的另一端,您尝试使用相同的变量作为Set-Content的文件名。

如果您的CSV引用了可能包含逗号的字段,则无法进行简单的拆分。如果是这种情况,更好的选择是使用正则表达式将每一行分成几列,然后再对其进行计数。像这样:
$re = '(?:^|,)(?:\"(?:[^\"]+|\"\")*\"|[^,]*)'
$csv = Get-Content 'your_file.csv'
$count = [regex]::matches($csv[0], $re).groups.count
$csv | Select -Skip 1 | % {
if([regex]::matches($_, $re).groups.count -eq $count) {
...do valid stuff
} else {
...do invalid stuff
}
}

关于csv - 循环浏览CSV文件并验证每一行的列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37534774/

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