我有一个带有“名称”和“状态”列的CSV文件。我们需要从CSV文件中读取名称,并对此执行一系列操作,一旦对一个名称完成操作,就需要在同一.csv文件中将该名称的状态更新为“已完成”。
Name Status poc_dev_admin poc_dev_qa poc_dev_qa1 poc_dev_qa2 poc_dev_qa3 poc_dev_qa7 poc_dev_qa8 poc_dev_ro poc_dev_support poc_dev_test1 poc_dev_test14 poc_dev_test15 poc_dev_test16
执行plt.imshow(img)
后,CSV文件应如下所示:
Name Status poc_dev_admin Completed poc_dev_qa poc_dev_qa1 poc_dev_qa2 poc_dev_qa3 poc_dev_qa7 poc_dev_qa8 poc_dev_ro poc_dev_support poc_dev_test1 poc_dev_test14 poc_dev_test15 poc_dev_test16
我尝试使用此逻辑,它会更新所有组的“状态”列,而不是在处理相应的组后进行更新。我可以做些什么改变才能按预期工作吗?
poc_dev_admin
答案 0 :(得分:1)
类似的东西应该可以满足您的描述:
$file = 'c:\test\abintm.csv'
$csv = Import-Csv $file
foreach ($row in $csv) {
$groupname = $row.Name
# ...
# process $groupname
# ...
$row.Status = 'Completed'
}
$csv | Export-Csv $file -NoType
如果需要在处理下一条记录之前更新CSV,则可以将CSV导出置于循环的末尾(将$row.Status
设置为“已完成”之后)。
答案 1 :(得分:0)
针对您指定的用例修改了代码,
$row
而不是$groupname
$groupname
变量$List = Import-Csv -Path "c:\test\abintm.csv"
foreach ($row in $List) {
$groupName = $row.Name
$status = $row.Status
if ($groupName -eq "poc_dev_admin") {
$status = "Completed"
($List | ? { $_.Name -eq $groupName }).Status = $status
}
}
if (($List | ? { $_.Status -eq "Completed" }) -ne $null) {
# $List has been modifed and hence write back the updated $List to the csv file
$List | Export-Csv -Notypeinformation -Path "C:\test\abintm.csv"
}
# else nothing is written