Powershell:读取csv并创建哈希表,然后使用哈希表中的数据进行计算



我有一个CSV文件,其中包含下表

 Name    X      Y     Z
 Al      50    1900   15
 Steel   30    5700   15

基本上,以"Name"开头的行就是标题行。我想首先在powershell中阅读这个CSV并创建一个哈希表。之后,我需要从哈希表中读取数据并进行简单的计算。例如,如果我使用$Hashtable.Al,那么我可以得到X,Y,Z的值。下面的方程可以是$Q = $X+$Y+$Z,所以我可以得到$Q的答案。($Hashtable.Steel应该以相同的方式工作。)

    #Read CSV and Create the hashtable
    #Read data -X Y Z from hashtable by using
    $Al = $Hashtable.Al
    #Do a simple calculation
    $Q = $Al.X + $Al.Y + $Al.Z
    $Q

假设Name值对每一行都是唯一的,这非常容易:

# Create hashtable
$HashTable = @{}
# Import CSV
$CSV = Import-Csv .PathToCsvFile.csv
# Iterate over the CSV rows and populate the hashtable:
$CSV |ForEach-Object { $HashTable[$_.Name] = $_ }

如果要确保仅包含在$HashTable中的对象具有XYZ属性,请在分配它们时使用Select-Object

$CSV |ForEach-Object { $HashTable[$_.Name] = $_ |Select-Object X,Y,Z }

我知道这个话题很古老,但我想用它来解决一些问题。我有一个相当大的CVS文件(100000行,大约20列),需要在散列中存储2列以供进一步处理。用measure对象计时,我发现获取内容比导入csv获取数据快几个数量级。使用字符串数组中的数据来设置哈希也比迭代生成的CSV对象更快。我在代码中测试了这两种场景,并在比较苹果与苹果时反复发现结果是一致的。

最新更新