当前位置: 首页 > 知识库问答 >
问题:

使用Powershell清理CSV数据

沈凡
2023-03-14

我有一个保存文件路径信息的CSV。如果我将单元格合并在一起并在它们之间添加“/”,就可以创建完整的文件路径。有时这些单元格可以是空的,或者其中有多个目录。Eg.桌面/文件夹A/FolderB

因此,我有了剧本:

Import-Csv -Path 'test.csv'  | 
Select-Object @{Name='Path';Expression={$_.Folder1, "/" ,$_.Folder2, "/",$_.Folder3, "/",$_.Folder4, "/",$_.Folder5, "/", $_.Folder6, -join ','}}    | 
Export-Csv 'OutputTestFile.csv' -NoTypeInformation

这将生成输出测试文件,该文件看起来有点像:

人力资源中心///人力资源中心/文件//,

人力资源中心/员工服务//员工服务-内部/员工服务/程序/a/b/c,

HR/HR业务合作伙伴//人才

由于双斜杠的存在,这不利于创建干净的文件路径。空间也是一个问题。我甚至不需要将它导出回CSV。我需要能够获取文件路径的列表/数组,以便在环境中创建文件结构。

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

人力资源/人力资源业务合作伙伴/人才

HR Central/HR Central/Documents/,

共有3个答案

澹台正真
2023-03-14

如果您使用PSObject,这可能会很短。如果你只是想要一个路径数组,我会在一个ForPerage-Object循环中完成:

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 '(?<=/) | (?=/)'}
}
汪胤
2023-03-14

许多选择之一:

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 "/"
        }
    }
栾烨华
2023-03-14

另一种选择:

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 '/'
} 
 类似资料:
  • 我有一个CSV文件,它有重复的列标题,所以我不能使用导入CSV来完成这项工作。标题名称是动态的。我需要得到第三列、第四列以及之后的每四列(例如:从0列开始,第2列、第3列、第7列、第11列、第15列…)。 我有重复列名的原因是头3需要与头0相同的名称,以四个组为一组。0个 我使用“获取内容”,因为我不知道如何使用“导入Csv”实现此功能。我必须使用Import Csv来获取列数,而我无法用get

  • 我是PowerShell的新手。我正在尝试创建一个脚本,它将通过CSV和Active Directory组进行查看。如果用户不在CSV中,我想删除该用户(当前正在使用写输出进行测试)。我必须使用UserPrincipalName。我的CSV只是 排名,编号 某物,3333//此用户是AD GROUP 某物,2222//此用户不在AD组中 目前,我想让它只输出3333,但它两者都输出。 导入模块活动

  • 我对powershell非常陌生,我不知道如何将我的数组放入csv文件中,在该文件中,每个字符串都会进入一个新行。下面是一些示例代码。 当我检查csv文件时,所有的输出都显示在一行上,而不是在行的特定列中迭代。任何帮助将是非常有用和感激

  • 我需要将数据添加到CSV文件的最后一列。我拥有的测试文件如下所示: 我已经设法解析了CSV,但是在最后一列“SKILL”中添加数据是很困难的。要求是在每行的最后一列添加“Java”一词 请注意,添加到最后一列的值在各行之间保持不变。

  • 问题内容: 我正在尝试将CS​​V文件读入(字符串的)列表列表,将其传递以从数据库中获取一些数据,构建新数据列表的新列表,然后传递该列表列表,以便写入新的CSV文件。我到处都看了,似乎找不到如何做的例子。 我宁愿不使用简单的数组,因为文件的大小会有所不同,而且我也不知道该如何使用数组的尺寸。我没有处理文件的问题。我只是不确定如何处理列表列表。 我发现的大多数示例都将创建多维数组或在从文件中读取数据

  • 问题内容: Google讨论了有关清理Web访问查询的各种讨论,但我找不到任何解决我所关注的问题的方法: 在ac#程序中清理用户输入数据。这必须通过可逆的转换来完成,而不是通过移除来完成。作为问题的简单示例,我不想破坏爱尔兰的名字。 最好的方法是什么,有没有执行此功能的库函数? 问题答案: 这取决于您所使用的SQL数据库。例如,如果要在MySQL中使用单引号文字,则需要使用反斜杠Dangerous