如何在powershell中遍历csv文件中的一行
Posted
技术标签:
【中文标题】如何在powershell中遍历csv文件中的一行【英文标题】:how do I loop through a line from a csv file in powershell 【发布时间】:2012-08-06 18:52:42 【问题描述】:我想在 powershell 中处理一个 csv 文件,但我不知道 CSV 文件中的列标题在处理时会是什么。
例如:
$path = "d:\scratch\export.csv"
$csv = Import-csv -path $path
foreach($line in $csv)
foreach ($head in $line | get-member | where-object $_.MemberType -eq "NoteProperty" | select Definition)
#pseudocode...
doSomething($head.columnName, $head.value)
如何遍历 csv 文件中的行,获取列名和值?还是我应该这样做的另一种方式(比如不使用 Import-csv)?
【问题讨论】:
【参考方案1】:Import-Csv $path | Foreach-Object
foreach ($property in $_.PSObject.Properties)
doSomething $property.Name, $property.Value
【讨论】:
这对我来说跳过了第一行。我没有在我的 csv 中使用标题,我只有一行没有逗号,例如:thing1ForEach-Object
而不是简单的 ForEach
的重要区别。
@unNamed 不,一点也不重要。【参考方案2】:
遍历 CSV 文件每一行的每一列的另一种方式是
$path = "d:\scratch\export.csv"
$csv = Import-Csv -path $path
foreach($line in $csv)
$properties = $line | Get-Member -MemberType Properties
for($i=0; $i -lt $properties.Count;$i++)
$column = $properties[$i]
$columnvalue = $line | Select -ExpandProperty $column.Name
# doSomething $column.Name $columnvalue
# doSomething $i $columnvalue
所以您可以选择:您可以使用$column.Name
获取列名,或使用$i
获取列号
【讨论】:
Get-Member 按字母顺序对列进行排序。如果需要 CSV 列的原始顺序,则会丢失。【参考方案3】:$header3 = @("Field_1","Field_2","Field_3","Field_4","Field_5")
Import-Csv $fileName -Header $header3 -Delimiter "`t" | select -skip 3 | Foreach-Object
$record = $indexName
foreach ($property in $_.PSObject.Properties)
#doSomething $property.Name, $property.Value
if($property.Name -like '*TextWrittenAsNumber*')
$record = $record + "," + '"' + $property.Value + '"'
else
$record = $record + "," + $property.Value
$array.add($record) | out-null
#write-host $record
【讨论】:
以上是关于如何在powershell中遍历csv文件中的一行的主要内容,如果未能解决你的问题,请参考以下文章
遍历 CSV 的每一行并使用 Python-Pandas 写入文件夹中的单个 JSON 文件