首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Powershell清理CSV数据

使用Powershell清理CSV数据
EN

Stack Overflow用户
提问于 2019-07-03 14:42:15
回答 3查看 151关注 0票数 0

我有一个CSV,它保存关于文件路径的信息。如果合并单元格并在它们之间添加"/“,则可以创建完整的文件路径。有时,这些单元格可以是空的,或者其中有多个目录。例如:桌面/FolderA/FolderB

因此,我得到了剧本:

代码语言:javascript
运行
复制
Import-Csv -Path 'test.csv'  | 
Select-Object @{Name='Path';Expression={$_.Folder1, "/" ,$_.Folder2, "/",$_.Folder3, "/",$_.Folder4, "/",$_.Folder5, "/", $_.Folder6, -join ','}}    | 
Export-Csv 'OutputTestFile.csv' -NoTypeInformation

这产生的输出测试文件看起来有点像:

HR Central // HR Central / Documents /, 人力资源中央/雇员服务//雇员服务-内部/雇员服务/程序/a/b/c, 人力资源/人力资源业务伙伴//人才和收购-内部/人力资源业务伙伴/,

因为有双斜杠,所以不能提供干净的文件路径。空间也是一个问题。我甚至不需要把它出口回CSV。我只需要能够获取一个列表/文件路径数组,这样我就可以在一个环境中创建文件结构。

理想情况下,我希望文件路径看起来如下:

人力资源/人力资源业务伙伴/人才和收购-内部/人力资源业务伙伴/, 人力资源中央/人力资源中心/文件/,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-03 15:46:33

另一种选择:

代码语言:javascript
运行
复制
foreach ( $csvLine in $(Import-Csv -Path 'test.csv')) {
    $rawPath = $csvLine | Select-Object @{
        Name='Path';
        Expression = { @( $_.Folder1, 
                          $_.Folder2, 
                          $_.Folder3, 
                          $_.Folder4, 
                          $_.Folder5, 
                          $_.Folder6) -join '/'
                    }
        }
    # remove multiple solidi
    $rawPath.Path.Split(
         '/', 
         [System.StringSplitOptions]::RemoveEmptyEntries) -join '/'
} 
票数 1
EN

Stack Overflow用户

发布于 2019-07-03 15:29:08

许多备选方案之一:

代码语言:javascript
运行
复制
Import-Csv -Path 'test.csv' |
    Select-Object @{
        Name = 'Path'
        Expression = {
            $row = $_
            $folders = @()
            1..6 | ForEach-Object {
                $folder = $row."Folder$_"
                if ($folder -and -not ([String]::IsNullOrEmpty($folder.Trim())))
                {
                    $folders += $folder.Trim()
                }
            }
            return $folders -join "/"
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2019-07-08 20:55:32

如果您使用PSObject,这可能会非常短。如果您只想要一个路径数组,我会在一个ForEach-Object循环中这样做:

代码语言:javascript
运行
复制
Import-Csv test-csv | Select Folder[1-6] | ForEach-Object {
    $_.psobject.Properties.where({$_.Name -match '^Folder[1-6]$' -and !([string]::IsNullOrWhiteSpace($_.Value))}).Value -join '/' -replace '(?<=/) | (?=/)'}
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56872604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档