ZetCode

PowerShell Import-Csv

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍PowerShell中的Import-Csv cmdlet。此cmdlet从CSV文件中导入数据,并根据数据创建对象。

CSV基础知识

CSV(逗号分隔值)是一种用于存储表格数据的简单文件格式。每一行代表一条记录,字段由逗号分隔。PowerShell可以高效地读取和操作CSV文件。第一行通常包含列标题。

Import-Csv 的基本用法

使用Import-Csv的最简单方法是仅提供文件路径。这将读取CSV文件,并根据标题创建具有属性的对象。每一行将成为一个具有相应属性值的独立对象。

csv1.ps1
Import-Csv -Path "data.csv"

此命令从data.csv读取数据并输出对象。第一行应包含列名。之后每一行都会创建一个具有这些属性的对象。

处理CSV数据

导入CSV数据后,您可以像处理任何PowerShell对象一样处理它。属性对应于列标题。您可以使用标准的PowerShell cmdlet来过滤、排序和处理数据。

csv2.ps1
$data = Import-Csv "employees.csv"
$data | Where-Object { $_.Department -eq "IT" }

这会导入员工数据并筛选出IT部门的员工。Where-Object cmdlet根据Department属性进行筛选。$_变量代表管道中的每个对象。

指定分隔符

CSV文件有时使用不同的分隔符,如分号或制表符。使用-Delimiter参数指定非逗号分隔符。这确保了输入文件中字段的正确解析。

csv3.ps1
Import-Csv -Path "data.txt" -Delimiter ";"

此命令读取一个分号分隔的文件。分隔符必须与文件中使用的分隔符匹配。PowerShell将按分号而不是逗号分割每一行。

选择特定列

您可以使用Select-Object从CSV文件中选择特定列。当您只需要某些数据时,这非常有用。它可以减少内存使用并简化输出。

csv4.ps1
Import-Csv "products.csv" | Select-Object Name, Price

这会导入产品数据,但只保留Name和Price列。输出对象将只有这两个属性。其他列将被从输出中丢弃。

转换数据类型

CSV数据默认导入为字符串。您可以使用计算属性将属性转换为其他类型。这使得对导入的数据进行数值运算成为可能。

csv5.ps1
Import-Csv "sales.csv" | Select-Object *,
    @{Name="Amount"; Expression={[int]$_.Amount}}

这会将Amount列转换为整数。@{}语法创建了一个计算属性。使用Select-Object *可以保留原始列。

处理标题

当CSV文件缺少标题时,您可以使用-Header参数指定它们。提供一个列名数组。这些将成为导入对象的属性名。

csv6.ps1
Import-Csv "data_noheaders.csv" -Header "ID", "Name", "Value"

这会导入一个无标题的CSV文件并为其分配列名。第一行将作为数据,而不是标题。所有对象都将具有ID、Name和Value属性。

处理大型CSV文件

对于大型CSV文件,请有效地使用管道以尽量减少内存使用。一次处理一行,而不是一次加载所有数据。这种方法在大数据集上具有更好的可扩展性。

csv7.ps1
Import-Csv "largefile.csv" | ForEach-Object {
    # Process each row here
    $_.Name
}

这会逐行处理文件中的每一行。ForEach-Object cmdlet一次处理一行。内存使用量与文件大小无关,保持恒定。

来源

PowerShell 文档

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

作者

我叫Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。我从2007年开始撰写编程文章。迄今为止,我已撰写了1400多篇文章和8本电子书。我在教授编程方面有十多年的经验。

列出 所有 PowerShell 教程