PowerShell实现CSV指定列非空值替换为Yes及列名空格处理
解决CSV列替换问题的PowerShell修正方案
修正后的完整代码
Import-Csv -Path ".\test.csv" | ForEach-Object { # 处理"Letter Grade"列:非空/非全空白值替换为"Yes" if (-not [string]::IsNullOrWhiteSpace($_."Letter Grade")) { $_."Letter Grade" = "Yes" } # 处理"Numeric Grade"列:非空/非全空白值替换为"Yes" if (-not [string]::IsNullOrWhiteSpace($_."Numeric Grade")) { $_."Numeric Grade" = "Yes" } $_ } | Export-Csv .\poop2.csv -Encoding UTF8 -NoTypeInformation
问题解决细节
1. 带空格列名的正确访问方式
PowerShell中访问包含空格的CSV列属性,直接用双引号包裹列名即可,格式为$_."列名",比如$_."Letter Grade"。这种方式能直接定位到目标列,替代你之前错误的引号/大括号用法。
2. 非空值的准确判断
放弃用正则.+匹配非空值,改用.NET的[string]::IsNullOrWhiteSpace()方法:
.+仅匹配至少一个可见字符,无法处理单元格为全空白(如多个空格)的情况;- 该方法会同时判断字符串是否为
null、空字符串,或仅包含空白字符,完美覆盖你需要的"非空"判定场景。
原数据示例
| Letter Grade | Numeric Grade |
|---|---|
| A | |
| 10 | |
| C | 5 |
期望处理后的数据
| Letter Grade | Numeric Grade |
|---|---|
| Yes | |
| Yes | |
| Yes | Yes |
内容的提问来源于stack exchange,提问作者MJB
相关产品推荐
相关产品推荐

