ZetCode

PowerShell ConvertFrom-Csv

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍PowerShell中的ConvertFrom-Csv cmdlet。这个cmdlet将逗号分隔值(CSV)数据转换为对象。

CSV基础知识

CSV是一种用于存储表格数据的简单文件格式。每一行代表一条记录,字段之间用逗号分隔。PowerShell可以通过各种cmdlet处理CSV数据。ConvertFrom-Csv cmdlet对于处理CSV字符串或文件至关重要。

ConvertFrom-Csv基本用法

使用ConvertFrom-Csv最简单的方法是使用CSV字符串。第一行应包含标题(属性名)。后续的每一行都成为具有这些属性的对象。输出是一个对象集合。

csv1.ps1
$csvData = @"
Name,Age,Occupation
John,32,Engineer
Sarah,28,Designer
Michael,45,Manager
"@

$objects = $csvData | ConvertFrom-Csv
$objects

此命令将CSV字符串转换为对象。每个对象都具有Name、Age和Occupation属性。输出以表格形式显示对象。

处理自定义分隔符

默认情况下,ConvertFrom-Csv使用逗号作为分隔符。您可以使用-Delimiter参数指定不同的分隔符。这对于使用制表符、分号或其他分隔符的文件很有用。分隔符必须与数据中的实际分隔符匹配。

csv2.ps1
$csvData = @"
Name;Age;Occupation
John;32;Engineer
Sarah;28;Designer
Michael;45;Manager
"@

$objects = $csvData | ConvertFrom-Csv -Delimiter ';'
$objects

此命令处理带有分号分隔符的CSV数据。输出与逗号分隔数据相同,但解析正确。-Delimiter参数确保字段分隔正确。

从文件转换CSV

您可以将Get-ContentConvertFrom-Csv结合使用来处理CSV文件。首先读取文件内容,然后将其转换为对象。这种方法在处理外部数据文件时很常见。文件必须具有正确的CSV格式。

csv3.ps1
$fileContent = Get-Content -Path "C:\data\employees.csv"
$objects = $fileContent | ConvertFrom-Csv
$objects | Format-Table -AutoSize

此命令读取CSV文件并将其转换为对象。Format-Table cmdlet确保输出清晰。调整文件路径以匹配您的系统。

处理标题

如果您的CSV缺少标题,您可以使用-Header参数指定它们。提供一个列名数组作为属性名。这对于没有标题行的文件很有用。标题将应用于所有后续行。

csv4.ps1
$csvData = @"
John,32,Engineer
Sarah,28,Designer
Michael,45,Manager
"@

$headers = "Name","Age","Occupation"
$objects = $csvData | ConvertFrom-Csv -Header $headers
$objects

此命令为无标题的CSV数据添加标题。每个对象将具有指定的属性名。标题数组必须与列数匹配。

处理不同编码的CSV

处理CSV文件时,可能会出现编码问题。使用Get-Content的-Encoding参数指定正确的编码。常见的编码包括UTF8、ASCII和Unicode。这确保特殊字符能够正确读取。

csv5.ps1
$fileContent = Get-Content -Path "C:\data\employees.csv" -Encoding UTF8
$objects = $fileContent | ConvertFrom-Csv
$objects

此命令读取UTF8编码的CSV文件。-Encoding参数确保字符被正确解释。根据需要调整您的特定文件的编码类型。

过滤转换后的CSV数据

将CSV转换为对象后,您可以像处理任何PowerShell对象一样过滤它们。使用Where-Object选择特定的记录。这允许在PowerShell中直接进行强大的数据操作。筛选条件可以使用任何对象属性。

csv6.ps1
$csvData = @"
Name,Age,Occupation
John,32,Engineer
Sarah,28,Designer
Michael,45,Manager
"@

$objects = $csvData | ConvertFrom-Csv
$engineers = $objects | Where-Object { $_.Occupation -eq "Engineer" }
$engineers

此命令仅过滤Engineer职业。Where-Object cmdlet检查每个对象的Occupation属性。仅返回匹配的对象。

导出转换后的CSV数据

处理完CSV数据后,您可能希望导出它。使用Export-Csv将对象保存回CSV格式。这将创建一个包含当前数据的新CSV文件。您可以指定分隔符并包含/排除标题。

csv7.ps1
$csvData = @"
Name,Age,Occupation
John,32,Engineer
Sarah,28,Designer
Michael,45,Manager
"@

$objects = $csvData | ConvertFrom-Csv
$objects | Export-Csv -Path "C:\data\processed.csv" -NoTypeInformation

此命令将处理后的数据保存到新的CSV文件中。-NoTypeInformation参数会移除额外的类型元数据。输出文件将包含修改后的CSV格式数据。

来源

PowerShell 文档

在本文中,我们介绍了PowerShell中的ConvertFrom-Csv cmdlet。

作者

我叫Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。自2007年以来,我一直在撰写编程文章。迄今为止,我已撰写了1400多篇文章和8本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PowerShell 教程