假设我从PowerShell中读取了一个CSV文件:
$data = Import-Csv "myfilename.csv"
CSV文件(通常)可以包含字符串和数字,但是PowerShell将它们作为字符串存储在内存中:
PS D:\> $ data [0] .Col3.GetType() IsPublic IsSerial名称BaseType -------- -------- ---- -------- 是是是字符串System.Object
导入后,能够从字符串转换类型将很有用。如果只有一两列,则可以使用以下计算的属性将它们转换:
$data = Import-Csv "myfilename.csv" |
select -Property @{n='Col2';e={[int]$_.Col2}},
@{n='Col3';e={[double]$_.Col3}}
但是,假设我事先不知道列名和预期的类型。相反,我有一个任意的“模式”告诉我哪些列应该是哪种类型,例如:
$Schema = @{Col1=[string];Col2=[int];Col3=[double]}
如何将Import-CSV的输出转换为架构确定的类型?(最好以有效/优雅的方式)
样本CSV文件
“ Col1”,“ Col2”,“ Col3” “ a”,2,4.3 “ b”,5,7.9
您可以通过-as
强制转换来做到这一点:
$data = Import-Csv "myfilename.csv" |
select -Property @{n='Col2';e={$_.Col2 -as $Schema.Col2}},
@{n='Col3';e=$_.Col3 -as $Schema.Col3}}
对于任意数量的列,您可以将此答案中概述的方法扩展到一个类似的问题:
$data = Import-Csv "myfilename.csv" | Foreach-Object {
foreach ($property in $_.PSObject.Properties) {
$property.Value = $property.Value -as $Schema[$property.Name]
}
$_ # return the modified object
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句