【问题标题】:Split CSV based on column Value with no formatting根据列值拆分 CSV,没有格式
【发布时间】:2016-02-04 15:19:12
【问题描述】:

我为此找到了许多问题和答案,但似乎找不到适合我的问题和答案。我需要根据列值拆分 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"
}

【问题讨论】:

  • 这个“csv”是如何生成的?这看起来像部分 XML。我会更多地关注控制它的创建方式。这不是 CSV

标签: csv powershell


【解决方案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 的组合是将第一列的实际标题替换为更明智的东西。

【讨论】:

    猜你喜欢
    • 2017-10-10
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    相关资源
    最近更新 更多