如何在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 中使用标题,我只有一行没有逗号,例如:thing1thing2 等。换句话说,一个简单的列表 @Radmation Import-CSV $path -Header A 是您需要的更改。这告诉 powershell 将标题“A”添加到列中并将每一行视为一个值,而不是认为第 1 行是标题行。 在使用 CSV 时使用 ForEach-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 文件中的行数组?

PowerShell:如何计算 csv 文件中的行数?

如何设置循环遍历CSV文件中每个值的jmeter测试?

遍历 CSV 的每一行并使用 Python-Pandas 写入文件夹中的单个 JSON 文件

如何在多个文件中搜索字符串并在 Excel 或 Powershell 中的 csv 中返回带有行号/文本的文件名

Powershell写入第一行但无法将后续行写入for循环中的文件