基于列值拆分CSV而不进行格式化

时间:2016-02-04 15:19:13

标签: csv powershell

我找到了很多问题和答案,但似乎找不到适合我的问题。我需要根据列值拆分CSV。以下是我的工作表示例:

<option value="">Choose Year</option>   ParentID
<option value="Civic1990">1990</option> Civic
<option value="CRX1990">1990</option>   CRX
<option value="Prelude1990">1990</option>   Prelude
<option value="Accord1990">1990</option>    Accord
<option value="Prelude1991">1991</option>   Prelude
<option value="Civic1991">1991</option> Civic
<option value="CRX1991">1991</option>   CRX
<option value="Accord1991">1991</option>    Accord
<option value="Prelude1992">1992</option>   Prelude
<option value="Civic1992">1992</option> Civic
<option value="Accord1992">1992</option>    Accord
<option value="Prelude1993">1993</option>   Prelude
<option value="Civic1993">1993</option> Civic
<option value="CivicdelSol1993">1993</option>   CivicdelSol
<option value="Accord1993">1993</option>    Accord
<option value="Passport1994">1994</option>  Passport
<option value="Accord1994">1994</option>    Accord
<option value="Prelude1994">1994</option>   Prelude
<option value="Civic1994">1994</option> Civic
<option value="CivicdelSol1994">1994</option>   CivicdelSol
<option value="Passport1995">1995</option>  Passport
<option value="Accord1995">1995</option>    Accord
<option value="Odyssey1995">1995</option>   Odyssey
<option value="Prelude1995">1995</option>   Prelude
<option value="Civic1995">1995</option> Civic
<option value="CivicdelSol1995">1995</option>   CivicdelSol
<option value="Passport1996">1996</option>  Passport
<option value="Accord1996">1996</option>    Accord
<option value="Odyssey1996">1996</option>   Odyssey
<option value="Prelude1996">1996</option>   Prelude
<option value="Civic1996">1996</option> Civic

我需要根据“ParentID”列进行拆分,并且只包含选项值。我目前正在使用PowerShell,但即使在排除数据类型时,在放置txt文件时服务器正在读取的输出txt文件中仍然存在格式。

这些选项值用于下拉列表,因此我需要格式化。

有没有办法在python或其他没有格式化的程序中执行此操作,以便网站可以读取txt文件?

这是我当前的PowerShell脚本:

$fullpath = "C:\Users\Ray\Desktop\YHP Revamp\New Cache 02-3\SubGroup\SubGroup.csv"

$path = Split-Path $fullpath -parent
$data = Import-CSV -Delimiter "," -Path $fullpath -Header "<option value="">Choose SubGroup</option>",ParentID

foreach ($group in $data | Group ParentID) {
    $data | Where-Object {$_.ParentID -eq $group.name} | 
        select * -ExcludeProperty ParentID |
        ConvertTo-Csv|   
        foreach {$_.Replace('#TYPE Selected.System.Management.Automation.PSCustomObject','')} |
        foreach {$_.Replace('"<','<')} |
        foreach {$_.Replace('>"','>')} |
        foreach {$_.Replace('"">','">')} |
        foreach {$_.Replace('=""','="')} |
        foreach {$_.Replace('=">','="">')} |
        Out-File "$path\$($group.name).txt"
}

1 个答案:

答案 0 :(得分:1)

假设您的输入文件实际上是一个以制表符分隔的文本文件,我会像这样处理它:

Import-Csv $fullpath -Delimiter "`t" -Header Year, ParentID |
  Select-Object -Skip 1 |
  ForEach-Object {
    $parent = $_.ParentID
    $_.Year -replace '.*?"(.*?)".*', '$1' | Out-File "$path\$parent.txt" -Append
  }

-Header Year, ParentIDSelect-Object -Skip 1的组合是用更合理的东西替换第一列的实际标题。